2022. 8. 5. 20:56ㆍGIT
브랜치를 이용하여 협업할 수 있다.
리모트 브랜치
저장소는 각자의 고유한 브랜치를 생성하고 관리한다.
원격 저장소에 생성한 브랜치를 리모트 브랜치라 한다.
로컬 저장소에 생성한 브랜치는 원격 저장소로 공유할 수 있다.
원격 저장소와 연결된 로컬 저장소에서 새로운 브랜치를 생성한다고 해서 자동으로 원격 저장소에도 브랜치가 생성되는 것이 아니다. 또 원격 저장소에 등록된 브랜치가 자동으로 로컬 저장소를 만들지도 않는다.
별도로 명령어를 실행하여 저장소를 동기화해야 한다.
원격 저장소와 로컬 저장소의 브랜치 이름이 보통 같지만 일치하지 않아도 된다.
리모트 브랜치는 보통 별칭/브랜치이름 형태이다.
추적 브랜치
깃의 브랜치는 특정 커밋 해시값을 가리키는 포인터다.
추적 브랜치는 리모트 브랜치의 마지막 커밋 해시값을 가리킨다.
추적 브랜치는 .git/refs 디렉토리에 저장되어 있다.
$ ls .git/refs
로컬 저장소가 원격 저장소와 연결될 때 원격 브랜치 트래킹 정보는 자동으로 갱신된다.
로컬 저장소는 마지막으로 연결된 리모트 브랜치의 커밋 해시값을 항상 가지고 있다.
브랜치 업로드
로컬 저장소의 브랜치 정보는 원격 저장소에 자동으로 등록되지 않는다.
등록된 원격 저장소의 리모트 브랜치는 remote show 명령어로 볼 수 있다.
현재 원격 저장소를 등록만 했기 때문에 아직 리모트 브랜치는 없다.
리모트 브랜치는 로컬 저장소와 통신을 하고 나서 생성된다.
※ 원격 저장소를 생성하면 초기화만 된 상태이다.
기본적으로 생성되는 master 브랜치도 없다.
로컬 저장소에서 파일 하나 만들어서 원격 저장소에 push하였다.
로컬 저장소 브랜치와 동일한 이름으로 리모트 브랜치가 생성되었다.
$ git push -u origin master 명령어는 선택한 브랜치를 원격 저장소로
원격 저장소에 리모트 브랜치를 생성하려면 로컬 저장소에서 브랜치 전송 명령을 실행해야 한다.
원격 저장소에 hotfix 리모트 브랜치가 추가 되었다.
이름이 다른 브랜치
일반적으로 로컬 저장소의 브랜치와 원격 저장소의 브랜치 이름은 동일하게 사용한다.
깃은 서로 다른 로컬 브랜치와 리모트 브랜치를 수동으로 지정하여 연결할 수 있다.
브랜치를 직접 수동으로 지정할 때는 콜론(:)으로 구분한다.
$ git push origin 브랜치이름:새로운브랜치
로컬 저장소에 feature 브랜치를 만들고 원격 저장소에 리모트 브랜치 function 생성하였다.
업스트림 트래킹
업스트림은 브랜치 추적을 다르게 표현한 것이다.
로컬 저장소의 브랜치와 원격 저장소의 브랜치는 업로드할 수 있도록 매칭되어 있다.
이러한 매칭을 업스트림 트래킹이라 한다.
트래킹 브랜치(업스트림)는 리모트 브랜치와 로컬 브런치를 연결해주는 중간 다리 역할을 한다.
clone 명령어로 저장소를 복제할 때 원격 저장소에 등록된 트래밍 브랜치들을 자동으로 함께 설정한다.
위에서 리모트 브랜치를 추가한 원격 저장소에서 clone하여 새로운 로컬 저장소에서 리모트 브랜치 목록을 확인해보자.
$ git branch -r
로컬 저장소와 연결된 원격 저장소의 리모트 브랜치 목록보기
원격 저장소에 있는 모든 리모트 브랜치를 확인할 수 있다.
origin/HEAD는 원격 저장소의 마지막 커밋의 해시값을 가리키는 HEAD 포인터인 것 같다.
모든 브랜치 정보를 확인하려면 -a 옵션을 사용한다.
$ git branch -a
저장소를 복제하면 원본과 동일한 트래킹 브랜치가 자동으로 설정된다.
복제된 저장소의 트래킹 브랜치를 확인할 때는 -vv 옵션을 사용한다.
$ git branch -vv
현재 트래킹 브랜치만 하나 표시되는데 현재 master 브랜치가 원격 저장소의 origin/master로 업스트림 트래킹된 것을 확인 할 수 있다.
트래킹 브랜치가 하나만 표시된 것은 clone 명령어로 복제할 때 모든 브랜치를 한 번에 복제하지 않았기 때문이다.
다른 브랜치를 풀 작업으로 받아 트래킹 브랜치를 활성화하거나 직접 트래킹 브랜치를 지정할 수 있다.
다음 명령어를 사용하면 새로운 업스트림을 만들 수 있다.
$ git checkout --track origin/브랜치이름
트래킹을 위해 새로운 function 브랜치를 생성한 후 원격 저장소는 origin/function으로 업스트림을 설정하였다.
이 방식은 복제된 로컬 저장소와 원격 저장소의 브랜치 이름을 동일하게 생성한 것이다.
로컬 저장소에서 코드를 수정하고 push 하지 않은 상태에서 트래킹 브랜치를 확인해보았다.
트래킹 브랜치 origin/function에서 ahead 1이 표시된다. 이는 원격 저장소로 전송되지 않은 커밋이 하나 있다는 의미다.
복제된 저장소에서 수정된 커밋이 원격 저장소로 전송되었다.
원본 저장소로 이동하여 function 브랜치를 로컬 저장소의 feature 브랜치로 내려받는다.
원격 브랜치 복사
원격 저장소와 로컬 저장소의 브랜치 목록은 서로 다를 수 있다.
다른 개발자가 원격 저장소에 새로운 리모트 브랜치를 생성할 수 있기 때문이다.
이렇게 생성된 원격 저장소의 리모트 브랜치를 이용해서 로컬 저장소에도 새로운 브래치를 생성하여 동기화할 수 있다.
실습을 위해 원격 저장소에 새로운 브랜치를 만들었다.
깃허브에서 자체적으로 새로운 리모트 브랜치를 생성할 수 있다.
원격 저장소의 브랜치 정보를 로컬 저장소로 가져올 때 fetch 명령어를 쓴다.
$ git fetch
원격 브랜치 origin/aaa가 추가되었으니 로컬 저장소에 aaa 브랜치를 새롭게 생성하기로 한다.
$ git checkout -b 새이름 origin/브랜치이름
브랜치 aaa에서 text.txt를 수정하겠다.
text.txt를 수정하고 커밋을 하였지만 push하지 않아 로컬 저장소와 원격저장소간에 커밋 내용 차이가 있다.
push 명령어로 추가한 커밋을 원격 저장소 aaa 브랜치에 저장하였다.
업스트림 연결
기존에 있는 브랜치를 업스트림으로 직접 설정할 수도 있다.
브랜치를 생성한 후 직접 트래킹 브랜치를 지정했다.
$ git branch -u 원격저장소/브랜치이름
현재 브랜치와 리모트 브랜치를 업스트림 설정하는 것이다.
-u 옵션은 --set-upstream-to 약자로 기존 브랜치를 특정 원격 브랜치를 추적한다.
깃허브에서 bbb 브랜치를 만들었다.
로컬 저장소의 bug 브랜치가 원격 저장소에 있는 bbb 리모트 브랜치의 트래킹 브랜치로 업스트림 되었다.
'GIT' 카테고리의 다른 글
[GIT] 브랜치 삭제 (0) | 2022.08.05 |
---|---|
[GIT] 브랜치 전송 (0) | 2022.08.05 |
[GIT] 브랜치 생성과 이동 동시에 하기 (0) | 2022.08.03 |
[GIT] HEAD 포인터 (0) | 2022.08.03 |
[GIT] 브랜치 로그 (0) | 2022.08.02 |