초보 개발자

5 -1 깃허브로 협업하기 본문

깃 & 깃허브

5 -1 깃허브로 협업하기

taehyeki 2021. 9. 17. 21:49

이제부터 git_home과 git_office라는 2개의 디렉터리를 만들어 깃허브 협업을 연습하겠습니다.

 

원격 저장소 복제하기 - git clone

원격 저장소를 기존에 연결된 지역 저장소 외에 다른 지역 저장소에서 사용하려면 원격 저장소에 담긴 내용 전체를 지역 저장소로 가져와야 합니다. 원격 저장소를 지역 저장소로 똑같이 가져오는 것을 클론이라고 합니다.

 

git clone 깃 주소 git_home
git clone 깃 주소 git_office

git_home이라는 디렉토리를 만들고 거기에 원격 저장소를 받아왔다.

git_office도 마찬가지이다.

 

우리는 하나의 원격 저장소를 공통으로 하는 두개의 지역 저장소가 있는 셈이다.

git_home의 파일들이다 git_office에도 똑같이 존재할 것이다.

git log

git log를 해보면 우리의 commit 내역들이 모~두 정리가 되어있는 것을 확인할 수 있다.

원격저장소에 올리기 이 전의 커밋들도 전부 있어서 놀랐다.

 

이렇게 원격 저장소를 복제하면 자동으로 지역 저장소와 원격 저장소가 연결됩니다.

git remote -v

 

개인 컴퓨터에서 작업하고 올리기

git_home디렉터리에 있는 f1.txt를 간단히 수정하고 커밋을 해보겠다.

그리고 push까지하여 원격 저장소에도 올려볼 것이다.

원격 저장소의 내용을 복제한 지역 저장소에서 내용을 수정하고 커밋한 후 다시 원격 저장소에 올렸습니다!!!

 

회사 컴퓨터에서 내려받아 작업하기

이번엔 회사 컴퓨터에서 원격 저장소를 복제했을 때와 원격 저장소의 커밋 상황이 달라졌습니다. 

( 개인 컴퓨터에서 원격 저장소에 커밋을 올렸기 때문 !! )

따라서 먼저 원격 저장소에 새로 올라온 커밋을 가져와야 합니다.

git pull

자 무언가 받아 진 것을 확인할 수 있다!!

 

그럼 이번에는 f1.txt을 한번더 수정해 보도록 하겠습니다. f를 추가한 뒤 커밋, 원격 저장소에 푸쉬를 하였습니다.

 

잘 올라가진 것을 확인할 수 있습니다~~

 

다시 개인컴퓨터(git_home)에서 작업할 때는 git pull 명령으로 원격 저장소에 있는 최신 커밋을 가져와 작업을 해야 합니다!!!!

 

하나의 원격 저장소에 둘 이상의 컴퓨터를 연결해서 사용한다면 풀과 푸시를 습관화 하는 것이 좋다. 어떤 컴퓨터에서 접속을 하든 항상 최신 소스를 유지할 수있기 때문이다.

 

원격 브랜치 정보 가져오기

git pull 명령은 원격 저장소의 최신 커밋을 지역 저장소에 합쳐준다. 하지만 최신 커밋을 합치기 전에 원격 저장소에 어떤 변화가 있는지 먼저 살펴보아야 한다. 

원격 master브랜치

지역 저장소의 master브랜치처럼 원격 저장소도 만들 때 기본으로 master브랜치가 생성된다.

여기에서 원격 저장소에 있는 HEAD는 원격 저장소의 master브랜치를 가리킬 것이고, 원격 master브랜치는 'add f'라는 최종 커밋을 가리킵니다.

 

git_home으로 이동한뒤 로그 창을 확인해보면

최종 커밋인 add f앞에 HEAD->master origin/master , origin/HEAD라고 표시되어 있다.

 

여기에서 HEAD -> master는 이 커밋이 지역 저장소의 최종 커밋이라는 뜻이고!!

                     origin/master는 원격 저장소의 최종 커밋이라는 뜻이다.

origin/HEAD는 뭘까.. origin(원격저장소)의 HEAD가 origin/master를 가리키고 있으니까 그냥 적은건가..?

아무튼 아직 git_home 디렉터리가 원격 저장소를 복제한 상태 그대로 이기때문에 지역저장소와 원격 저장소 모두의 최종 커밋이 같다!!

 

여기서 새 파일 f3.txt를 만들어 커밋해보겠다

HEAD->master는 방금 커밋한 create f3을 가리킵니다. 지역저장소의 최종 커밋이 create f3커밋이라는 뜻입니다.

하지만 (origin/master, origin/HEAD)는 아직 'add f'커밋을 가리키고 있습니다.

 

커밋상태 )     add - d   --------->  create f3

                   origin/master              master

이러한 상태 이고

git status를통해 확인해 볼 수 있다.

내 master 브랜치가 원격저장소의 master브랜치 보다 하나 앞서 있는 것을 알 수 있다.

그리고 git push를 통해 지역 저장소의 커밋을 원격으로 올리라고 알려주고있다!!

 

git push

 

푸시하기 전까지는 master브랜치와 origin/master브랜치가 가리키는 커밋이 달랐지만, 푸시한 후에는 master와 origin/master 브랜치가 같은 커밋을 가리키게 된다!!!

커밋상태 )     add - d   --------->  create f3

                                                       origin/master             

                                                              master

원격 브랜치 정보 가져오기 - git fetch

git pull이 원격 저장소의 커밋을 가져와서 무조건 지역 저장소와 합친다면

git fetch 명령은 원격 브랜치에 어떤 변화가 있는지 그 정보만 가져옵니다.

 

다른 사람이 수정한 소스를 한번 더 훑어보고 지역 저장소와 합치고 싶다면 풀 대신 페치를 사용해서 커밋을 가져온 다음 지역저장소와 합치면 된다.

 

git_office 디렉토리로 이동하여 패치를 해보겠다.

무언가 받아온 것 같다.

 

하지만 f3.txt 파일은 없다.

git log --oneline

(HEAD->master)만 보이고 원격 저장소의 origin/master는 보이지 않는다.??

원격 저장소의 최신 커밋 정보를 가져왔지만 아직 지역 저장소에 합치지 않아 원래 git_office에 있던 최신 커밋만 나타나기 때문이다. ( 그럼 git fetch이전에 원격 저장소의 커밋 정보들은 날아 간 것으로 봐야하나??? )

git 상태를 보면 원격 저장소의 최신 커밋하나가 아직 지역저장소에 반영되지 않았다고 한다.

git pull 명령을 사용하면 지역 저장소를 업데이트 할 수 있다고 알려주네요.

 

그럼 페치로 가져온 최신 커밋 정보는 대체 어디 있는거야?

FETCH_HEAD라는 브랜치로 가져오게 된다. 이 브랜치로 가져온 정보는 지역 저장소에 바로 반영 되지 않는다.

 

페치해서 가져온 최신 커밋을 살펴보고 싶다면

git checkout FETCH_HEAD
git log --oneline

여기에 모두 표시되어 있는 것을 알 수 있다.

이 커밋이 페치로 가져온 원격 브랜치의 최신 커밋이다. 이 내용을 살펴보고 원격 브랜치의 최신 커밋을 지역 저장소에 합칠지 말지를 결정하면 된다.

 

지역 저장소의 최신 커밋과 페치한 커밋의 차이를 비교하려면 

git diff HEAD origin/master // master브랜치에서 해야함

이렇게 정보를 알 수 있다.

 

패치한 후에 최신 커밋을 현재 브랜치에 합치려면 

1. git pull 명령을 사용해서 원격 저장소의 소스를 내려 받을 수도 있고,

2. git merge명령으로 FETCH_HEAD에 있던 커밋을 병합할 수도 있다.

 

git merge명령으로 병합해보겠다.

git checkout master
git merge FETCH_HEAD

이렇게 잘 합쳐진 것을 볼 수 있다.

 

git pull 명령은 git fetch와 git merge FETCH_HEAD 명령 두개를 합친 것과 같은 기능을 합니다.

즉 git fetch를 사용해 원격 브랜치를 가져온 다음 git merge명령을 사용해 원격 브랜치와 현재 브랜치를 합쳐주는 것을 git pull 명령으로 한꺼번에 할 수 있습니다.

 

다른 브랜치에 있는 커밋이라면 다음과 같이 합병

페치한 뒤 

git merge origin/브랜치 이름