공사중

쉽게 정리한 Git 사용법 : 원격 저장소 관리하기(push, fetch, pull, show, rename, remove) 본문

개발 | Git

쉽게 정리한 Git 사용법 : 원격 저장소 관리하기(push, fetch, pull, show, rename, remove)

행운개발자 LuckyDeveloper 2019. 2. 20. 17:03

Github에서 데이터 가져오기 포스팅에서는 단순히 데이터를 가져오는 것만 해보았습니다. 이제 원격저장소에 데이터를 저장하는 등 그 이상의 것을 다루려고 합니다.  


먼저 용어의 정의가 필요합니다. 원격 저장소는 Remote Repository, 원격 저장소에서 데이터를 받아서 로컬로 가져오는 것은 Pull, 로컬에서 원격으로 데이터를 저장하는 것은 Push입니다. 그리고 다른 사람의 원격 저장소에 "제가 새로운 내용을 추가했는데 이 내용을 당신의 저장소에 추가해서 모든 사람들이 볼 수 있게 만들어주세요."라고하는 것은 Pull Request라고 합니다. 


git remote

는 연결된 저장소가 어디인지 보여주는 명령어입니다. git clone을 할 때 데이터를 가져오는 장소인 원격 저장소는 기본적으로 'origin'이라는 이름으로 저장이 됩니다.  저는 Github에서 데이터 가져오기 포스팅에서 제 github 계정에 있는 데이터를 GitTest라는 위치에서 git clone을 했습니다. 그래서 GitTest 아래에 std라는 디렉토리가 생기고 모든 데이터가 이 폴더에 저장되었습니다.  결과적으로 GitTest에서는 연결된 원격 저장소가 없고 GitTest/std에서는 origin이라는 출력이 나옵니다. 

-v옵션을 사용하면 어느 저장소가 어떤 이름을 저장되었는지 알 수 있습니다.  지금으로서 fetch는 pull과 같은 것이라고 보면됩니다. 차이점을 뒤에서 설명합니다. 데이터를 내려받을 장소/올릴 장소가 모두 origin으로 설정되어있다는 뜻입니다.


git clone을 하면 자동으로 origin이 설정이 되긴 하지만, 제대로 원격 저장소를 연결하려면 아래와 같이 해야합니다.

git remote add [원하는 저장소 이름] [url]


원격저장소를 추가한 다음에 로컬에는 없지만 원격에는 있는 데이터를 가져오려면 아래와 같이 합니다. 

git fetch [원하는 저장소 이름]

이 명령어를 사용하면 원격 저장소의 모든 히스토리를 로컬로 가져온 다음에 원하는 방향으로 합칠 수 있습니다.  이 때 합치는 것을 Merge라고 부릅니다.


fetch는 로컬에는 없지만 원격에는 있는 데이터를 가져오기만 합니다.

pull은 로컬에는 없지만 원격에는 있는 데이터를 가져온 다음에 자동으로 로컬에 있는 데이터와 Merge를 합니다. 


로컬에만 있는 데이터를 원격 저장소에 저장하는 것은 Push라고 부른다고 했습니다.

git push [리모트 저장소 이름] [브랜치 이름]


브랜치를 한 번  설명해보겠습니다. 한글로는 가지치기라고 번역이 됩니다. 

  개발하다보면 코드를 여러 개로 복사해야하는 일이 많은데, 코드를 통째로 복사하고나서 원래 코드와는 상관없이 독립적으로 개발을 진행할 수 있습니다. 이렇게 독립적으로 개발하는 것이 브랜치입니다.

  원격 저장소가 만들어지면 그 저장소의 모든 데이터가 최종적으로 저장되는 장소는 'Master 브랜치'라고 부릅니다. 맨 처음에는 Master 브랜치만 존재합니다. 마스터에 파일을 추가추가하다가 "현재의 기능까지는 잘 작동하는데 실험적으로 일부 기능을 추가해서 실험해보고 싶다."라고 할 때 새로운 브랜치를 떼어냅니다(만듭니다.). 그리고 새로 만든 브랜치를 checkout 합니다. 이후에 추가하는 내용은 새로 만든 브랜치에만 추가되고 마스터에는 추가되지 않습니다. 떼어낸 브랜치에서의 실험이 완성되어 정상적으로 작동이 이루어지면 Master와 Merge를 합니다. 


branch가 이런 개념이다보니 어떤 원격 저장소의 어떤 브랜치에 데이터를 추가Push할 것인지 명시를 해야합니다. 그런데 주의할 점이 있습니다.  만약 원격 저장소를 여러 명의 사람들이 동시에 공유한다고 해보겠습니다. 모두 git clone이나 git remote add 명령어를 통해서 각자의 로컬에 원격저장소를 등록했습니다. 이후에 각자 개발을 하고 master에 push할 때는 처음으로 push한 사람만 바로 push 할 수 있습니다. 나머지의 사람들은 다른 팀원이 push한 내용이 들어있는 master와 로컬에서 자신이 개발한 내용을 fetch+merge(합쳐서는 pull)한 다음에 master에 다시 push할 수 있습니다.  어려운 부분은 댓글로 남겨주세요. 아실 때까지 설명해드립니다!


만약 원격 저장소를 여러개 등록하면 pull이나 push를 했을 때 그리고 merge를 했을 때 어디서 어디로 데이터가 이동하고, 어디와 어디가 합쳐지는지 헷갈릴 수 있습니다. 이 때는 아래의 명령어를 입력합니다.

git remote show [원격 저장소 이름]


$ git remote show origin
* remote origin
  Fetch URL: https://github.com/schacon/ticgit
  Push  URL: https://github.com/schacon/ticgit
  HEAD branch: master
  Remote branches:
    master                               tracked
    dev-branch                           tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

위의 예시는 데이터가 어디로 저장되고, 어디로부터 가져오는지를 알려줍니다. 그리고 git pull과 git push를 했을 때 어떤 브랜치가 어떻게 되는지도 명시되어있습니다. 이 부분은 원격 저장소의 이름을 명시하지 않고 push를 했을 때 어디로 push가 되는지 알려줍니다.


원격 저장소의 이름 변경은 아래와 같이.

git remote rename [기존 이름] [바꾸고 싶은 이름]


원격 저장소의 삭제는 아래와 같이 합니다.

git remote remove [삭제할 원격 저장소의 이름]