이번 시간에는 지역저장소와 원격저장소가 상호작용을 할때 git
의 내부는 어떤 변화가 있는지 , 어떤 원리로 작동하는지 알아보겠습니다.
새로운 저장소 repo
를 만들고 이동한다음에 f1.txt
를 만들고 add
와 commit
을 해줍니다.
github
로 이동해서 여기서도 저장소를 만들어 줍니다.
그리고 repo
를 만들면서 생성된 ssh
주소를 복사한 뒤에
git remote add
을 사용해서 저장소를 연결 해줍니다.
gistory
에 들어가면 .git\config
의 내용만 변했습니다.
파일을 보면 origin
이라는 remote
가 config
파일에 저장된 것을 확인 할 수 있습니다. 그것의 url
주소도 저장되었습니다.
이후 push
를 하기 위해서 git push --set-upstream origin master
를 실행해줍니다.
이때 내부적으로 변화가 생깁니다.
master
라는 branch
를 원격저장소의 branch
와 연결시켜주는 작업이 되고 업로드 하는 작업이 실행됩니다.
다시 gistory
로 가보면 master
이라는 branch
가 추가되었습니다. 그리고 remote=origin
, 즉 origin
과 master
과 연결되었다는 뜻입니다.
.git\refs\remotes\origin\master
을 보면 commit
한 파일의 내용이 존재하는 것을 확인 할 수 있습니다. 이때 경로에 remote
가 들어가 있는데 이는 원격저장소임을 의미합니다. 금방 push
를 했기 때문에 원격 저장소에서도 파일이 존재하게 됩니다.
또한 .git\refs\heads\master
에서도 똑같이 commit
한 파일의 내용이 존재합니다. 이는 원격저장소가 아니라 로컬 저장소에 있는 파일임을 의미합니다.
즉 git log --decorate --graph
를 하면 HEAD
가 master
와 origin
을 동시에 가르킵니다. 이는 같은 commit
의 내용을 가졌다는 의미입니다.
f1.txt
의 내용을 두번을 수정하고 두번을 commit
를 하겠습니다.
다시 git log --decorate --graph
을 하면 master
는 2번의 commit
을 하기 때문에 더 위에있습니다. 하지만 아직 push
를 하기 전이기 때문에 origin/master
는 1 의 commit
에 존재합니다.
그렇다면 git log
를 했을때 git
이 이러한 정보를 알 수 있었던 이유가 무엇일까요?
바로 .git\refs\heads\master
에 있는 commit
의 내용과
.git\refs\remotes\origin\master
에 담긴 내용을 통해서 가능했던 것입니다.
이제 다시 git push
를 해봅시다. 아까 저장소를 서로 연결했기 때문에 push
만 넣어도 됩니다.
햔재 .git\refs\remotes\origin\master
의 파일만 변화하였습니다. 이는 원격 저장소 파일이며 아까 push
를 하였기 때문에 로컬 저장소에서 commit
한 내용이 담겨져 있는것을 확인 할 수 있습니다.
즉 이제 지역저장소의 master
와 원격저장소의 origin
이 같은 commit
를 가르킵니다.
이번시간에는 원격 저장소의 원리에 대해 알아봤습니다.
여기까지 하도록 하겠습니다.