Branch 관리에 대한 포스팅이다. 아직 부족한 점이 많은데, 새로 알게되거나 수정해야할 내용이 있으면 업데이트할 예정. 현재 내가 어떤 식으로 개발을 하고 있는지에 대한 내용으로 이해하면 될 것 같다.
작업 환경 세팅
위 그림이 전체적인 작업 환경이다. 특정 서비스에 대하여 여러 개발자가 협업하는 상황에서 Upstream repository의 master branch는 현재 서비스되는 내용으로 이해하면 된다.
이 서비스 업데이트에 참여하기 위해 내 개인 GitHub 계정에서 Upstream repository를 folk한다. 그러면 '[관리자 계정]/[프로젝트 명]'과 별개로 '[내 계정]/[프로젝트 명]'이 생성된다. 전자가 Upstream repository, 후자가 Origin repository라고 할 수 있다.
그 후 GitHub의 '[내 계정]/[프로젝트 명]' (Origin repository)을 내 개인 컴퓨터에 연결할 수 있다. 연결을 통해 내 컴퓨터에 생성 및 저장된 프로젝트 폴더(.git)를 Local repository라 한다. 만약 repository가 public이라면 $ git clone https://github.com/[내 계정]/[Project].git을 통해 local repository를 만들 수 있지만, private repository라면 아래와 같이 token을 사용하여 clone할 수 있다 [참조].
: '
GitHup에서 [Settings]>[Developers settings]>[Personal access tokens]>[Generate new token]
Note 및 적절한 scopes (repo 등) 선택 후 [Generate token]
생성된 [Token] 복사해 둠.
'
# 사용자 설정 (1)
$ git config --global user.name "[이름]"
$ git config --global user.email [이메일]
# 사용자 설정 확인
$ git config --list
# Clone private repository
$ git clone https://[이름]:[Token]@github.com/[내 계정]/[Project].git
Personal access token과 관련해서는 [링크1], [링크2]를 참조하면 더 많은 정보를 얻을 수 있다.
마지막으로 개인 컴퓨터에 Upstream repository를 등록한다.
$ cd [Project]
$ git remote add upstream https://github.com/[관리자 게정]/[Project].git
# 다음의 명령어로 확인 가능
$ git remote
> origin
> upstream
이렇게 하면 3종류의 repository 및 각각의 master branch (총 3종류)가 존재하게 된다. 새로운 작업을 하기 전에는 모든 master branch의 내용이 같은지 확인을 하고, 다르면 맞춰줄 필요가 있다. 먼저 local Repository의 master branch에서 Upstream Repository의 master branch를 pull (git pull upstream master)하고, Local Repository의 master branch에서 Origin Repository의 master branch로 push (git push origin master)한다.
(master) $ git pull upstream master
# 이때 --rebase parameter를 추가하면 commit history 관리가 더 좋다고 한다.
(master) $ git push origin master
이제 나의 작업을 위해 Local Repository의 master branch에서 작업 branch ('work')를 생성한다.
(master) $ git branch work
(master) $ git checkout work
> Switched to branch 'work'
# 혹은 아래와 같이 한번에 할 수 있다.
(master) $ git checkout -b work
Switched to a new branch 'work'
다음으로 Origin에도 작업 branch를 만들어 둘 수 있다.
(work) $ git push origin work
작업 브랜치 (Branch) 정리
작업 branch가 생성되면 해당 branch에서 자유롭게 코드 작업을 하고 Staging & Commint을 한다. 이때 그래프 및 Commit의 단순화를 위해 squash와 rebase를 종종 진행할 수 있다.
1) squash: 여러 개의 commit을 하나로 묶어줌.
(work) $ git rebase -i HEAD~5 # (함께 뭉칠 commit 수)
# vim 창이 뜨면 남길 첫 줄을 제외하고 pick 대신 f로 바꿔주면 된다. 첫 줄은 그대로 pick.
2) rebase: 그래프 단순화를 위해 Upsteam Repository의 master branch 내용을 rebase.
(work) $ git pull --rebase upstream master # eclipse에서도 가능.
# git log --oneline --branches --graph 로 graph 확인 가능
작업 브랜치 업데이트
Upstream master에 내가 개발한 내용을 업데이트할 필요가 있다면 먼저 Origin work에 Local work의 내용을 push한다.
(work) $ git push -u origin work
그 후, GitHub에서 Origin Repository의 작업 branch를 Upstream Repository의 master branch로 pull request한다. 검토 결과 이상이 없으면 Merge pull request로 합쳐준다.
작업 브랜치 제거
만약 내가 개발한 부분이 끝나서 다른 새로운 branch를 사용하려고 한다면, Origin work와 Local work는 삭제해준다 (Branch의 수명은 짧게 가져가는 것이 좋음)
(work) $ git push origin --delete work
(work) $ git checkout master
(master) $ git branch -d work
Master 브랜치 내용을 작업 브랜치로 업데이트
만약 개발기간이 길어져서 Upstream master 내용이 local의 작업 branch에 필요하다면 내용을 받아서 진행해야 한다. 먼저 local Repository의 work branch에서 Upstream Repository의 master branch를 pull (git pull upstream master)하고, Local Repository의 work branch에서 Origin Repository의 work branch로 push (git push origin work)한다.
(work) $ git pull upstream master
(work) $ git add .
(work) $ git commit -m "Sync with upstream master"
(work) $ git push origin work
혹은 기존 작업 branch를 삭제한 후 master branch에서 새로 작업 branch를 만드는 방법도 있다.
참고하면 좋을 링크
1. 다음 링크에 여러 문제 상황에 적용 가능한 해결 방안이 제시되어 있다.
2. Personal access code가 만료돼었다면 재설정을 해줘야 한다.
# $ git remote rm origin
# $ git remote add origin https://github.com/[계정]/[프로젝트].git
$ git remote set-url origin https://[계정]:[토큰]@github.com/[계정]/[프로젝트].git
# $ git push --set-upstream origin master
정리
# 작업 환경 세팅
(master) $ git pull upstream master
(master) $ git push origin master
(master) $ git checkout -b work
(work) $ git status
/* 작업 */
# origin 업데이트
(work) $ git commit -am "Update"
(work) $ git push origin work
/* origin에서 pull request */
/* upstream master에 merge 후 origin work 삭제 */
# 작업 환경 정리
(work) $ git checkout master
(master) $ git pull upstream master
(master) $ git push origin master
(master) $ git branch -d work
# 확인
(master) $ git log --oneline --branches --graph
Reference
# git, # github
'Computer Science > Git & GitHub' 카테고리의 다른 글
[GitHub] 폴더 내 코드를 GitHub에 백업하는 방법 (0) | 2022.03.19 |
---|---|
[GitHub] Gist를 활용한 코드 (Jupyter notebook) 공유 (0) | 2022.02.26 |