Computer Science/Git & GitHub

[GitHub] 개발을 위한 Branch 관리 (Upstream, Origin, Local repository)

2021. 3. 26. 17:03

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. 다음 링크에 여러 문제 상황에 적용 가능한 해결 방안이 제시되어 있다.

 

GitHub 환경에서의 실전 Git 레시피 : NHN Cloud Meetup

GitHub 환경에서의 실전 Git 레시피

meetup.toast.com

 

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

  1. https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EC%B5%9C%EC%B4%88-%EC%84%A4%EC%A0%95

 

 

 

 

# git, # github

 

 

 

 

 

 

 

728x90
반응형