출처: GIT CLI - Backup by 이고잉, 생활코딩, CC BY
집에 있는 내 컴퓨터에서 작업한 내용을 원격 저장소에 백업하고 싶을 때 push라는 명령어를 사용한다.
백업을 했으면 복원도 가능해야 하는데, 집이 아닌 회사의 컴퓨터에서 원래 하던 작업을 이어서 하고 싶다면 어떻게 해야 할까? 바로 clone 명령어를 통해 원격 저장소의 내용을 복제해서 지역 저장소를 생성하면 된다.
그리고 회사의 컴퓨터에서 작업한 내용은 다시 원격 저장소에 push한다.
집에서 다시 작업을 하려면 pull 명령으로 원격 저장소의 내용을 가져온다.
작업이 끝나고 원격 저장소에 다시 push 해두면,
그 내용을 다시 회사에서 pull로 당겨와 편하게 사용할 수 있다.
https://git.wiki.kernel.org/index.php/GitHosting
위 사이트에 비교하고 있는 Github, GitLab 등과 같이 우리에게 원격 저장소를 임대해주는 것을 깃 호스팅이라고 한다.
깃허브에서 원격 저장소를 처음 생성하면 아래와 같은 화면이 뜨는데, 설명에 따라 원격 저장소에 지역 저장소를 연결해보자!
명령어 | 설명 |
---|---|
git remote add origin [원격 저장소의 HTTPS 주소] | 원격 저장소와 연결 (origin은 원격 저장소에 붙인 별명) |
git remote | 원격 저장소의 목록 확인 |
git remote -v | 원격 저장소의 HTTPS 주소까지 보여줌. |
git remote remove origin | 원격 저장소와의 연결 끊기 |
앞서도 설명했지만, 지역 저장소의 버전을 원격 저장소에 업로드 하는 방법이 바로 push이다.
우리의 지역 저장소는 여러 개의 원격 저장소와 연결될 수 있는데, 그 중에서 어떤 원격 저장소와 기본적으로 연결할 것인지를 설정하는 명령어가 git push --set-upstream origin master
이다. 이렇게 한번만 설정해주면 앞으로 git push
를 입력할 때 항상 원격 저장소 origin의 master라는 브랜치에 업로드가 된다. 또는 git push -u origin master
라는 명령어를 사용할 수도 있다. 이것은 원격 저장소의 master 브랜치와 지역 저장소의 master 브랜치를 페어링(연결) 시켜주는 명령어이다. 원격 저장소와 remote 시키고 나서 push를 처음할 때 한번만 설정해주면 된다.
원격 저장소인 깃허브를 새로고침 해서 확인해보면, 지역 저장소에서 했던 작업들이 모두 업로드된 것을 확인할 수 있다.
테스트 삼아서 hello1.txt 파일을 수정한 뒤에 커밋, 푸시를 해주면 원격 저장소에도 그대로 반영된다. 이러한 방식으로 우리의 소중한 데이터를 원격 저장소에 백업할 수 있다!
백업을 했으면 복원도 가능해야 하는데, 원격 저장소를 새로운 워킹 디렉토리에 복제해서 데이터를 복원하는 방법이 바로 clone이다. 이렇게 복원을 할 수 있게 되면, 여러 대의 컴퓨터에 동일한 상태의 파일을 유지할 수 있다.
clone을 하려면 원격 저장소의 주소가 필요하다. 아래 사진처럼 HTTPS 주소를 복사하자.
이제 clone 명령을 치면 되는데, HTTPS 주소 뒤에 새로 생성될 저장소의 디렉토리명을 지정해줄 수도 있다. 아래 이미지에서는 지정하지 않았기 때문에 디렉토리명이 클론해온 원격 저장소의 이름인 GitTutorial로 동일하다.
현재 디렉토리에 원격 저장소가 그대로 복제된 것을 확인할 수 있다! 깃허브에 올라와 있는 어마어마하게 많은 오픈소스들도 clone 명령으로 지역 저장소에 복제해와서 자유롭게 활용할 수 있다.
push와 반대로 원격 저장소의 내용을 지역 저장소로 가져오는 방법이 pull이다. 서로 다른 지역 저장소가 하나의 원격 저장소를 공유하고 있을 때, 한쪽의 지역 저장소가 파일 내용을 변경하고 커밋, 푸시를 하면 다른 지역 저장소에서는 반드시 pull을 통해 원격 저장소와 동기화 시켜줘야 한다. 만약 pull을 하지 않고 push를 하면 어떤 일이 발생할까?
에러의 힌트를 읽어보면, 또 다른 저장소가 동일한 레퍼런스에 push를 했기 때문에, 다시 push를 하기 전에 일단 pull을 먼저하라고 알려주고 있다.