깃허브를 사용하면 협업을 할 수 있다.
디렉터리 2개를 만들어서 깃허브 협업을 해보자.
저장소 2개를 집에 있는 컴퓨터, 회사에 있는 컴퓨터라고 생각하고 진행한다.
원격 저장소 클론
원격 저장소를 지역 저장소로 똑같이 가져오도록 복제하는 것을 '클론(clone)', '클로닝(cloning)' 이라고 한다.
HTTPS 방식으로 진행한다. 주소를 복사.
git clone (원격 저장소 주소) (디렉터리)
원격 저장소를 복제하면서 동시에 git_home 디렉터리를 만든다. git_home이라는 디렉터리가 없다면 자동으로 디렉터리가 만들어진다.
이미 만들어 놓은 지역 저장소로 복제하고싶으면 디렉터리로 이동 후 git clone 뒤에 마침표(.)를 붙여주면 된다.
집에 있는 컴퓨터 git_home과 회사에 있는 git_office에 파일을 클론했다.
집과 회사의 연결상태를 git remote -v 로 확인해보면 원격 저장소에 연결된 것을 확인할 수 있다.
git_home 으로 이동 후 f1.txt를 수정한다.
그리고 f1.txt 파일을 스테이징, 커밋한다.
github를 확인해보면 c가 추가된 f1.txt를 확인할 수 있다.
그러면 이번에는 회사 컴퓨터에 변경된 커밋 상황을 가져와보자.
하나의 원격 저장소에 지역 저장소가 2개 이상 연결되어 있을 때, 지역 저장소에서 작업하려면 원격 저장소의 변경 사항을 먼저 가져와야 한다. 최신 버전으로 작업을 하던가 해야하니까 !
git_office 에서 f1.txt를 확인해보면 c가 추가된 것을 확인할 수 있다.
f1.txt에 d를 추가하고 커밋한 후 푸시를 하자.
github f1.txt 파일에 d가 추가된 것을 확인할 수 있다.
이렇게 원격 저장소를 이용하여 협업을 진행할 수 있다.
원격 브랜치 정보 가져오기
git pull 명령은 원격 저장소의 최신 커밋을 지역 저장소로 가져온다.하지만 원격 저장소의 최신 커밋을 무조건 합치지 않고 원격 브랜치에서 어떤 변화가 있었는지 그 정보만 가져온 후 필요한 커밋만 합칠 수도 있다.
지금까지 진행된 커밋들이다.
이 상태에서 커밋 포인터가 어디를 가리키는지 생각해보자.
원격 저장소에 있는 HEAD는 원격 저장소의 main 브랜치를 가리킬 것이고, 원격 main 브랜치는 'add d'라는 최종 커밋을 가리킬 것이다.
git_home 의 git log를 보면 위와 같다.
여기서 (HEAD -> main) 은 이 커밋이 지역 저장소의 최종 커밋이라는 뜻이고, (origin/main) 은 원격 저장소의 최종 커밋이라는 뜻이다.
아직 git_home 디렉터리는 원격 저장소를 복제한 상태 그대로라서 지역 저장소와 원격 저장소의 최종 커밋이 같은거다.
git_home에 f3.txt 파일을 만들고 커밋을 한 후 브랜치 상태를 보자.
(HEAD -> main)은 방금 커밋한 create f3.txt를 가리킨다.
(origin/main, origin/HEAD)는 add d를 카리킨다.
git status로 상태 확인.
지역 저장소의 main 브랜치가 원격 main 브랜치의 버전보다 1 commit 앞서 있다고 알려준다.
git push 명령으로 지역 저장소의 커밋을 원격 저장소로 publish 하라고 알려준다.
git push 후 git log --oneline 으로 브랜치 상태 확인.
최신 상태로 맞췄다.
원격 브랜치 정보 가져오기 (git fetch)
패치(fetct) 는 '불러오다, 가져오다' 라는 뜻이다.
git fetch 명령은 원격 저장소의 정보를 가져오는 명령이다.
항상 배울 때는 '이 기능이 왜 필요한가?'를 생각하는 편이다.
그래야 이 기술을 사용할 때 제대로 사용할 수 있으니까.
github로 팀 프로젝트를 할 때 , 다른 사람이 원격 저장소에 올려 놓은 커밋을 무조건 내 지역 저장소에 합치지 않고, 원격 저장소에서 수정한 내용을 훑어본 후에 필요할 때만 지역 저장소에 합치는 상황에 사용한다. 이럴 때 fetch 명령을 사용해 변경 된 내용만 가져오면 된다.
지금 github 저장소에는 create f3.txt 커밋까지 올라간 상태이다.
회사 컴퓨터로 이동한 뒤 진행하자.
무언가를 가져왔다.
가져오긴 했는데 ls -al 를 통해 디렉터리를 확인해보면 f3.txt는 보이지 않는다.
(HEAD -> main) 만 보이고 원격 저장소의 origin/main은 보이지 않는다.
원격 저장소의 최신 커밋 정보를 가져왔지만 아직 지역 저장소에 합치지 않아 지역 저장소 (HEAD -> main)만 나타나는 것이다.
git status로 상태를 확인해보면 현재 main 브랜치가 origin/main에 비해 1 commit 뒤쳐지고 있다고 나온다.
원격 저장소의 최신 커밋 하나가 로컬에 반영되지 않았다는 것이다.
git pull 명령을 사용해서 업데이트 할 수 있다고 알려준다.
그러면 git fetch로 가져온 것은 어떻게 확인할 수 있을까?
git diff HEAD origin/main
git diff 명령을 사용해서 최신 커밋과 원격 저장소에서 가져온 fetch 커밋의 차이를 살펴보면 된다.
현재 작업 디렉토리의 HEAD 와 원격 저장소의 main 브랜치 간의 차리를 보여준다.
git은 파일을 이전 버전(a/)과 새로운 버전(b/)으로 비교하여 변경 사항을 보여준다.
f3.txt 파일이 추가 되었고 a 라는 문자열이 추가되었다는 내용을 확인할 수 있다.
git merge origin/main
merge 명령을 사용해 합친다.
즉 git pull 명령은 git fetch 명령왁 git merge origin/main 명령을 합친 기능이다.
create f3.txt 커밋에 지역 저장소와 원격 저장소 내용을 확인할 수 있다.
'Git' 카테고리의 다른 글
[Git] github 활용 (0) | 2023.12.10 |
---|---|
[Git] branch (1) | 2023.11.22 |
[Git] 커밋 메세지 수정하기 / 작업 되돌리기 (0) | 2023.11.11 |
[Git] 커밋 확인하기 (0) | 2023.11.11 |
[Git] 버전 만들기 (0) | 2023.11.11 |
댓글