'지역저장소'에 해당되는 글 1건

  1. 2020.07.23 [CH 05] 깃허브로 협업하기
깃 & 깃허브 입문2020. 7. 23. 09:03
728x90

1) 복제하기 Clone/ Cloning

 

$ git clone 복사한 주소 복제할 디렉터리

 : 복사한 주소(원격 저장소)를 복제할 디렉터리(지역저장소)로 복사하는 것

 

하나의 원격저장소를 kim과 jeong이 함께 이용한다고 가정해보겠습니다.

우선 원격저장소인 doit-git을 지역저장소인 kim, jeong에 복사해보겠습니다.

깃허브에서 복사할 원격저장소인 doit-git에 들어간 후, clone or download를 선택합니다.

그리고 복사하기 버튼을 눌러서 복사합니다.

(이때, ssh로 하고 싶으신 분은 Use SSH를 선택하시면 됩니다.)

원격저장소 'doit-git'

 

$ git clone 복사한 주소 복제할 디렉터리 명령어를 이용해서 kim과 jeong에 복제합니다.

git clone은 '복제할 디렉터리'가 없다면 자동으로 생성한 후 복제합니다.

 

참고)

$ git clone 복사한 주소 .

: 원격저장소를 현재 디렉터리( . )에 복제

git clone

 

지역저장소 jeong과 kim에 같은 내용(doit-git)이 복제되었는지 확인해보겠습니다.

kim의 git log

$ cd ..

: 상위 디렉터리로 이동

 

현재 kim 디렉터리에 있는데, jeong으로 이동하기 위해서는 kim의 상위 디렉터리로 이동해야합니다.

따라서 상위디렉터리로 이동 후 jeong으로 이동합니다.

jeong의 git log

이 둘을 비교해보면 3개의 커밋이 일치하다는 것을 알 수 있습니다.

 

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

$ git remote -v 명령어로 연결된 원격저장소를 확인 할 수 있습니다.

지역저장소(jeong)와 원격저장소(doit-git)가 연결됨

지역저장소 kim 디렉터리의 hello.txt에 'kim_first'라는 문구를 추가했습니다.

그리고 commit -am을 통해 스테이징과 커밋을 함께 했습니다.

(한 번 커밋된 적이 있어서 스테이징&커밋 한 번에 가능)

 

$ git push를 통해 수정한 내용을 원격저장소인 doit-git에 push했습니다.

kim의 hello.txt 수정 후 원격저장소에 push

깃허브의 원격저장소인 doit-git에 들어가서 commits를 클릭하면

다음과 같이 지역저장소인 kim에서 커밋한 'add kim-first'가 적용된 것을 알 수 있습니다.

원격저장소(doit-git)의 커밋이력

 

2) 원격저장소에서 지역저장소로 내려받기

지역저장소 jeong 입장에서는 원격저장소 doit-git이 초기에 복제했던 상태와 달라졌습니다.

그래서 원격저장소의 새 커밋을 가져와야합니다.

 

$ cd ~/jeong

: $ cd ~$ cd jeong 을 합친 명령어

지역저장소 jeong으로 이동

$ git pull

: 원격저장소 -> 지역저장소

원격저장소(doit-git)에서 지역저장소(jeong)으로 가져옴

$ vim hello.txt 명령어로 jeong 내부에 있는 hello.txt가 어떻게 바뀌었는지 확인해보았습니다.

kim에서 수정한 'kim_first'가 추가되어있는 것을 확인 할 수 있습니다.

pull 후 jeong의 hello.txt

 

※ 이렇게 하나의 원격 저장소둘 이상의 지역저장소를 연결해서 이용한다면

항상 시작할 때 pull을, 수정 후 push를 하는 것을 습관화 하는 것이 좋습니다.

 

3) 지역저장소, 원격저장소 최종 커밋

우선 지역저장소 kim으로 이동합니다.

지역저장소 kim

$ git log --oneline 명령어를 통해 커밋 상태를 확인해보았습니다.

 

이 때, 최종커밋인 add kim-first 앞에 있는 문구는 (HEAD -> master, origin/master, origin/HEAD)입니다.

여기서 HEAD->master지역저장소의 최종 커밋을,

origin/master원격저장소의 최종 커밋을 의미합니다.

 

아까 add kim-first를 지역저장소인 kim에서 만들고, 원격저장소로 pull했으니 둘의 최종 커밋이 add kim-first겠죠?

커밋상태 확인

kim에 새로 'create hello 3'라는 커밋을 추가하자 HEAD->master가 가리키는 것을 알 수 있습니다.

그리고 아직 push하지 않았으므로 원격저장소의 최종 커밋은 여전히 'add kim-first'임을 알 수 있습니다.

지역저장소 kim에 create hello 3커밋 추가

 

$ git status 명령어로 깃의 상태를 확인해보니,

지역브랜치가 원격브랜치보다 1 commit 앞서있으므로, "git push"를 이용해서 푸쉬 하라는 메시지가 나타납니다.

git status

$ git push 명령어로 원격저장소에 올려주면

다음과 같이 HEAD->master(지역)와 origin/master(원격) 둘 다 create hello 3커밋을 가리키는 것을 알 수 있습니다.

push 후 커밋로그

 

4) 원격 브랜치의 정보만 가져오기

$ pull 명령어는 원격저장소의 커밋을 바로 지역저장소에 합쳐줍니다.

하지만 합치기 전에 원격저장소에 어떤 변화가 있었는지 확인하는게 더 좋겠죠?

이 때 사용하는 명령어가 fetch(가져오다) 입니다.

 

$ git fetch

: 원격 저장소의 정보를 가져옴

 

위의 예시들을 잘 따라왔다면 현재 kim과 원격에는 'create hello 3'커밋이 있지만,

jeong에는 없는 상태 일 것 입니다.

 

jeong디렉터리로 이동 후 $ git fetch 명령어로 원격저장소 doit-git에서 가져옵니다.

그리고 ls -al로 상세 내역을 봅니다.

원격저장소에 hello3.txt파일을 올렸지만, 나타나지 않습니다

더보기

[ jeong에서 확인한 git log ]

 

$ git log 로 확인을 해보면 지역저장소의 최신 커밋인 HEAD -> master만 있는 것을 알 수 있습니다.

즉, 아직 jeong에 합치지 않아 원래 jeong에 있던 것만 나타납니다.

$ git staus를 통해 확인해보면 origin/master(원격)에 비해 1 commit 뒤처져 있으니

"git pull"을 통해 원격저장소에서 가져오라는 메시지가 나타납니다.

 

$ git checkout FETCH_HEAD

: FETCH_HEAD 브랜치로 이동

 

fetch로 가져온 최신 커밋 정보는 FETCH_HEAD에 있습니다.

따라서 FETCH_HEAD로 이동 후 git log로 확인해보겠습니다.

FETCH_HEAD로 이동

origin/master, origin/HEAD가 표시된 'create hello 3' 커밋이 원격브랜치의 최신 커밋임을 알 수 있습니다.

이렇게 fetch를 통해서 원격브랜치의 상태를 확인 할 수 있습니다.

 

확인 후 원격브랜치의 최신 커밋을 현재 브랜치에 합치고 싶으면

$ git merge FETCH_HEAD 명령어로 FETCH_HEAD의 커밋을 병합 할 수 있습니다.

 

우선 master브랜치로 이동 후 FETCH_HEAD 브랜치를 병합합니다.

 

다시 jeong의 git log를 확인해보면 다음과 같이 create hello 3에 HEAD->master, origin/master가 가리키는 것을 알 수 있습니다.

jeong의 git log

 

$ git pull

    =  $ git fetch + $ git merge FETCH_HEAD

 

즉, git pull 명령어를 이용하면

원격브랜치를 가져오기(git fetch)와 병합하기(FETCH_HEAD)를 한 번에 할 수 있습니다.

 

---------------------------------------------------------------------------------------------------

본 글은 Do it! 깃&깃허브 입문 책을 참고하여 작성하였습니다.

https://book.naver.com/bookdb/book_detail.nhn?bid=15910099

반응형
Posted by mminky