본문 바로가기

CS공부

Git Flow 협업하기

어제는 배달의민족 "코드리뷰"에 관한 세미나가 있어 시청하고 후기를 작성하느라 GitFlow를 공부만 하다가 멈췄다.

 

그럼 이제 실제로 더미 프로젝트를 만들어서 만들고 합치고 지지고 복고를 시작해볼려고한다.

 

자 우선 깃레포를 만들고 거기에 프로젝트를 넣어준다(이 부분은 너무 쉽기에 설명은 패스...)

 

그리고 바로 add , commit , push 하지 말고

.gitignore , .gitattributes 설정해주고 들어갑니다

 

gitignore에는 기본적으로 무시해야할것들을 추가해주기 위해 

 

# Created by https://www.gitignore.io/api/xcode,swift,cocoapods
# Edit at https://www.gitignore.io/?templates=xcode,swift,cocoapods

### CocoaPods ###
## CocoaPods GitIgnore Template

# CocoaPods - Only use to conserve bandwidth / Save time on Pushing
#           - Also handy if you have a large number of dependant pods
#           - AS PER https://guides.cocoapods.org/using/using-cocoapods.html NEVER IGNORE THE LOCK FILE
Pods/

### Swift ###
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore

## Build generated
build/
DerivedData/

## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata/

## Other
*.moved-aside
*.xccheckout
*.xcscmblueprint

## Obj-C/Swift specific
*.hmap
*.ipa
*.dSYM.zip
*.dSYM

## Playgrounds
timeline.xctimeline
playground.xcworkspace

# Swift Package Manager
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
# Packages/
# Package.pins
# Package.resolved
.build/
# Add this line if you want to avoid checking in Xcode SPM integration.
# .swiftpm/xcode

# CocoaPods
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
# Pods/
# Add this line if you want to avoid checking in source code from the Xcode workspace
# *.xcworkspace

# Carthage
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts

Carthage/Build

# Accio dependency management
Dependencies/
.accio/

# fastlane
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control

fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output

# Code Injection
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode

iOSInjectionProject/

### Xcode ###
# Xcode
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore

## User settings

## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)

## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)

## Xcode Patch
*.xcodeproj/*
!*.xcodeproj/project.pbxproj
!*.xcodeproj/xcshareddata/
!*.xcworkspace/contents.xcworkspacedata
/*.gcno

### Xcode Patch ###
**/xcshareddata/WorkspaceSettings.xcsettings

# End of https://www.gitignore.io/api/xcode,swift,cocoapods

 

추가를 해주세요

 

그리고 gitattributes에

*.pbxproj binary merge=union

한줄 적어주세요

해당 기능은 해당 파일을 binary처럼 인식하도록 설정하는 건데 이렇게 되면 project.pbxproj에 변경사항이 생겨도 팀원들과 conflict가 발생하지 않고 작업을 할 수 있다고 합니다.

 

참고

https://eloquence-developers.tistory.com/153

 

[React Native] iOS project.pbxproj conflict 방지

최근 작업을 하다가 ios 폴더의 project.pbxproj에서 conflict가 계속 발생하는 현상을 발견했습니다. ios 폴더에 파일을 설정하고 하다 보니 다른 분의 project.pbxproj와 다른 부분이 생겨 git pull 명령어를

eloquence-developers.tistory.com

 

그럼 .gitignore , .gitattributes 까지 추가한후 master 브랜치에 기능을 빈 프로젝트를 푸시해줍니다.

 

그리고 프로젝트에 들어가 브랜치를 만들어줍니다.

 

master에서 -> develop브랜치를 하나 만들어주고

develop 브랜치에서 작업을 할 브랜치를만들어줍니다

 

이렇게 만들어주고 기능을 간단하게 추가한다.

 

우선 저는 빈프로젝트에 

 

이렇게 간단하게 파일만 추가를 해놨습니다.

그런데 여러명이서 개발을 가정하니 기능을 만드는 다른사람도 있겠죠?

 

 

위의 과정을 반복한 TStoryB라는 기능을 만들 다른브랜치가 있다고 생각합시다!

여기도 마찬가지로

간단하게 파일만 추가하고 기능이 완성이 되었다는 가정으로 푸쉬를 날려놓고 develop 브랜치에 머지를 시켜봅시다.

 

깃에 가면 합쳐달라고 저를 기다리는 기능이 있어요 일단 팀단위 코드리뷰를 받기위해 PR을 날리고

B기능은 바로 develop에 머지가 된다고하네요 아이좋아~~

 

코드리뷰가 끝났다는 가정하에 있는 기능 B를 develop에 머지를 해줍니다.

 

그럼 develop 브랜치에 가보면

잘들어온걸 확인 할 수 있습니다.

그럼 이제 A기능도 합쳐야겠죠?

근데 이친구는 자동으로 머지가 안된데요 왜 ㅜㅜ 같은소스 안건드렸는데...

그 이유는

이 친구 때문이에요 ㅜㅜ 자세히 설명을 드리기에는 투머치 하닌깐 암튼 저기안에 설정값들이 develop이랑 다르니 conflict이 나는거에요 ㅜㅜ 그래서 이걸 해결해주기위해 Tuist , XcodeGen 을 사용하는 팀들이 많다고하네요

 

근데 전 안썼잖아요 해결해야죠 

 

머지를 할려고하면

이걸 해결하라고 나올거에요 

 

그럼 Resolve conflicts 눌러 해결하러 가봅시다.

여기 이렇게 나오는데 필요한 것들만 내비두고 삭제하면됩니다.

 

그렇게 필요한것들을 삭제해주고 머지가되면

짜자잔~~~

두개의 기능이 들어간 프로젝트가 완성... (이거한다고 하루넘게 삽질한건 비밀... DS.Store 파일 , 파일 고유값 디랙토리체계 이런거 너무싫어 ㅠㅠ)

 

이렇게 깃으로 협업을 하는 방법을 공부를 했습니다 ㅜㅜ

 

공부할때 사용했던 깃 링크입니다.

https://github.com/gnejfejf2/gitPractice

 

GitHub - gnejfejf2/gitPractice

Contribute to gnejfejf2/gitPractice development by creating an account on GitHub.

github.com

 

만약 팀단위로 진행을한다 저는 Tuist 강추합니다. 마지막 컨플릭나는걸 예방할수있어요