git 브랜치 워크플로

2022. 12. 11. 18:16기타 팁

728x90

<Long-Running 브랜치>

배포했거나 배포할 코드만 master 브랜치에Merge 해서 안정 버전의 코드만 master 브랜치에 둔다. 

개발을 진행하고 안정화하는 브랜치는 develop 이나 next라는 이름으로 추가로 만들어 사용한다. 

이 브랜치는 언젠가 안정 상태가 되겠지만, 항상 안정 상태를 유지해야 하는 것이 아니다.

 테스트를 거쳐서 안정적이라고 판단되면 master 브랜치에 Merge 한다. 

topic 브랜치(어떤 한가지 주제나 작업을 위해 만든 짧은 호흡의 브랜치)에도 적용할 수 있는데,

해당 토픽을 처리하고 테스트해서 버그도 없고 안정적이면 그때 Merge 한다.

안정적인 브랜치일수록 커밋 히스토리가 뒤쳐짐

 

전부 로컬에서 처리한 것.
로컬 저장소에서만 브랜치를 만들고 Merge했으며 서버와 통신을 주고 받지 않았다.

<리모트 브랜치>

1. git 서버의 저장소를 하나 clone 하면 git은 자동으로 origin이라는 이름을 붙인다.

origin으로부터 저장소 데이터를 모두 내려받고 master 브랜치를 가리키는 포인터를 만든다.

이 포인터는 origin/master라고 부르고 맘대로 조종할 수 없다.

그리고 git은 로컬의 master 브랜치가 origin/master를 가리키게 한다.

이제 이 master 브랜치에서 작업을 시작할 수 있다.

clone 이후 서버와 로컬의 master 브랜치

2. 로컬 저장소에서 작업을 하고 있는데 다른 팀원이 서버에 push하고 master 브랜치를 업데이트 했다.

그러면 이제 히스토리는 서로 달라진다. 

서버 저장소로부터 아직 데이터를 주고받지 않아서 origin/master 포인터는 그대로다.

로컬과 서버의 커밋 히스토리는 독립적

3. 리모트 서버로부터 저장소 정보를 동기화하려면 git fetch origin 명령 사용한다.

명령을 실행하면 origin 서버의 주소정보(이 예에서는 git.ourcompany.com)를 찾아서,

현재 로컬 저장소가 갖고 있지 않은 새로운 정보가 있으면 모두 내려받고 ,

받은 데이터를 로컬 저장소에 업데이트하고 , origin/master 포인터의 위치를 최신 커밋으로 이동시킨다.

git fetch 명령으로 리모트 브랜치 정보 업데이트

4. 리모트 저장소를 여러 개 운영하는 상황:

개발용으로 사용할 git 저장소를 팀 내부에 하나 추가해 보자.

이 저장소의 주소가 git.team1.ourcompany.com 이며

git remote add 명령으로 현재 작업 중인 프로젝트에 팀의 저장소를 추가한다.

이름을 teamone으로 짓고 긴 서버 주소 대신 사용한다.

서버를 리모트 저장소로 추가

5. 서버를 추가하고 나면 git fetch teamone 명령으로 teamone 서버의 데이터를 내려받는다.

명령을 실행해도 teamone 서버의 데이터는 모두 origin 서버에도 있는 것들이라서 아무것도 내려받지 않는다. 

하지만, 이 명령은 리모트 트래킹 브랜치 teamone/master 가

 teamone 서버의 master 브랜치가 가리키는 커밋을 가리키게 한다.

teamone/master 의 리모트 트래킹 브랜치

6. push 하기

로컬의 브랜치를 서버로 전송하려면 쓰기 권한이 있는 리모트 저장소에 push 해야한다.

로컬 저장소의 브랜치는 자동으로 리모트 저장소로 전송되지 않는다.

명령: git push remote이름 branch이름 

Git은 serverfix라는 브랜치 이름을 refs/heads/serverfix:refs/heads/serverfix 로 확장한다. 

이것은 serverfix 라는 로컬 브랜치를 서버로 push 하는데 리모트의 serverfix 브랜치로 업데이트한다는 것을 의미.

 

git push origin serverfix:serverfix 라고 push 하는 것도 같은 의미인데

이것은 “로컬의 serverfix 브랜치를 리모트 저장소의 serverfix 브랜치로 Push 하라” 라는 뜻이다.

로컬 브랜치의 이름과 리모트 서버의 브랜치 이름이 다를 때 필요하다. 

 

* 리모트 저장소에 serverfix 라는 이름 대신 다른 이름을 사용하려면

git push origin serverfix:awesomebranch 처럼 사용한다.

 

7. 나중에 누군가 저장소를 fetch하고 나서 서버에 있는 serverfix 브랜치에 접근할  때 

origin/serverfix라는 이름으로 접근 할 수 있다.

*이때 fetch 명령으로 리모트 트래킹 브랜치를 내려받는다고 해서 

로컬 저장소에 수정할 수 있는 브랜치가 새로 생기는 것이 아니다.

즉, serverfix라는 브랜치가 생기는 것이 아니라 

그저 수정 못하는 origin/serverfix 브랜치 포인터가 생기는 것이다.

 

*새로받은 브랜치의 내용을 Merge 하려면 git merge origin/serverfix 명령 사용

*Merge 하지 않고 리모트 트래킹 브랜치에서 시작하는 새 브랜치를 만들려면 

git checkout -b serverfix origin/serverfix 명령 사용

->origin/serverfix에서 시작하고 수정할 수 있는 serverfix라는 로컬 브랜치가 만들어진다.

728x90

'기타 팁' 카테고리의 다른 글

git - 커밋 가이드라인  (0) 2022.12.11
git - 분산 환경에서의 워크플로  (1) 2022.12.11
GIT 브랜치  (0) 2022.12.11
캡처도구 없이 단축키만으로 화면 캡처하기  (0) 2022.11.26
(github) clone과 fork의 차이  (0) 2022.11.23