지역 저장소(local repository)는 작업하는 컴퓨터의 저장소를 말한다. 반면 원격 저장소(remote repository)란 로컬이 아닌 컴퓨터 혹은 서버의 저장소를 말한다.
협업과 백업에 있어 원격 저장소가 중히 쓰이는데, 깃과 더불어 원격 저장소의 기능을 웹에서 제공하는 서비스 중 하나가 깃허브(GitHub)이다. 깃허브로는 아래와 같은 일을 할 수 있다.
깃허브를 시작하려면 깃허브 계정이 필요하니, 하나쯤 가입해주자!
깃허브에서는 저장소를 리포지토리(repository)라 한다. 원격 저장소를 만들거고, 지역 저장소를 원격 저장소와 연결하는 방법을 알아보자.
로그인 후 우측 상단의 [+] 버튼 - [New repository]를 눌러 필요 항목을 입력해 리포지토리를 만들 수 있다.
.gitignore
파일에 지정할지 선택한다. C++을 선택한다면 관련 컴파일 라이브러리나 실행파일 등을 깃에서 무시한다.깃허브 저장소의 접속 프로토콜(방법)을 지정할 수 있다. 웹 브라우저에서 접속할 때는 HTTPS를 사용하며, 뒤에 붙는 주소가 접속 주소가 된다. (SSH는 추후 다시 다룬다.)
보통 깃허브 접속 주소는 아래와 같은 형식을 가진다.
https://github.com/아이디/저장소명
🔔 리포지토리에 파일을 올리는 법
위 사진에서 몇 가지 방법이 제시되었다. 해당 내용은 아래에서 몇 가지를 볼 것이다.
- creating a new file or uploading an existing file
- create a new repository on the command line
- push an existing repository from the command line
- import code from another repository
[1] 지역 저장소를 만든다. 만약 이미 만들어둔 저장소가 있다면 해당 저장소의 위치로 이동한 뒤 이 과정은 생략한다. 필자는 이전 포스팅([Git] Git 저장소 만들기 및 Commit)에서 이미 만들어둔 내용을 활용할 것이다.
$ git init git_test # 디렉토리 만들기와 git 저장소 초기화를 동시에 함
$ cd git_test
[2] 문서 하나를 만들고 임의로 내용을 만든 뒤 커밋한다. 커밋 내역이 이미 있다면 이 과정은 생략한다.
$ vim hello.txt
$ git add hello.txt
$ git commit -m "M1"
[3] 이 저장소를 푸시함으로써 지역 저장소의 파일을 원격 저장소로 올릴 것이다. 깃허브의 원격 저장소 주소를 복사해 아래와 같이 입력한다.
여기서 origin은 붙여넣은 깃허브 저장소 주소를 가리키는데, 이 주소가 길기 때문에 origin이라 이름붙여 remote에 추가한다는 의미이다. 지역 저장소를 특정 원격 저장소에 연결하는 과정은 한 번만 수행하면 된다.
$ git remote add origin 복사한 주소
🔔 깃에서는 기본 브랜치를 master라 하고, 기본 원격 저장소를 origin이라고 한다.
[4] 잘 연결이 되었는지 확인하자. 아래 명령어를 수행했을 때 두 줄이 잘 나온다면 성공이다.
$ git remote -v
푸시(Push)는 '민다'라는 뜻을 떠올리면 된다. 지역 저장소의 커밋을 원격 저장소로 (밀어)보내는 것이다. git push
명령을 사용한다.
$ git push -u origin master
위 명령은 지역 저장소의 브랜치를 origin(원격 저장소의 master 브랜치)로 푸시하라는 뜻이다. -u
옵션으로 지역 저장소의 브랜치를 원격 저장소의 master 브랜치에 연결하도록 하며, 이는 처음 한 번만 사용하면 된다. 만약 푸시 명령 후 로그인 창이 나타나면 깃허브 로그인을 진행하면 된다.
😥 깃허브 로그인 에러
만약 로그인 시 비밀번호가 맞지 않는다면서 오류가 뜬다면 아래 링크를 통해 해결하자. 깃허브에서 로그인을 할 때 비밀번호 대신 토큰을 사용해서 벌어진 오류일 것이다.remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information. fatal: Authentication failed for 'https://github.com/EunGiHan/test-github.git/'
푸시 후 깃허브에 들어가 보면 원격 저장소로 파일이 올라간 것을 확인할 수 있으며, 파일 목록 위 commits
으로 지역 저장소 커밋 내용이 동일하게 올라간 것을 볼 수 있다. 또한 파일명 옆 커밋 메시지를 클릭하면 어떤 내용이 어떻게 바뀌었는지 소스코드로 비교해 볼 수 있다.
원격 저장소에 다시 푸시할 때는, 이미 지역 저장소의 브랜치와 origin의 master 브랜치를 연결했으므로 이후부터는 아래처럼 간단히 할 수 있다.
$ git push
지역 저장소가 없는 컴퓨터를 사용하는 등의 상황에서, 깃허브 사이트에서 직접 소스코드를 편집하고 커밋을 진행할 수 있다. [Add file]-[Create new file]로 파일을 새로 만들거나, 수정할 파일의 연필 모양 아이콘(Edit)로 편집을 할 수 있다.
여기서는 hello4.txt
를 만들어보겠다.
풀(Pull)은 Push의 반대로 당긴다는 뜻을 떠올리자. 원격 저장소에 수정되어 있거나 하는 등 지역 저장소와 상태의 차이가 있을 때, 지역 저장소의 파일 상태를 원격 저장소의 것과 같이 만드는 것이다. 원격 저장소의 소스를 (당겨)가져온다.
[1] 지금 원격 저장소의 상태는 지역 저장소와 다르게 hello4.txt
가 만들어져 있다. 지역 저장소의 파일 목록을 출력해보자.
$ ls
[2] 원격 저장소의 변경 사항을 지역 저장소로 풀 해보자. 아래 명령은 원격 저장소인 origin을 master 브랜치로 가져온다는 뜻이다. 단순히 기본 원격 저장소와 지역 저장소의 기본 브랜치가 각각 origin, master로 되어 있으므로 git pull
만 해도 명령은 유효하다.
$ git pull origin master
[3] 파일 목록과 깃 로그를 살펴보자. 원격 저장소에서 변경한 내역이 그대로 옮겨와 있다.