Git 교과서

코드 이력, 하나도 놓치지 마라!

버전 관리 시스템의 이해와 설치부터 커밋, 브랜치, 임시 처리, 병합, 복귀, 서브모듈, 태그까지
깃, 소스트리, 깃허브로 실습하며 기본기를 탄탄하게 다진다!

Yes24 교보문고 알라딘 인터파크 길벗

깃허브 연동 및 원격 등록


깃허브에 새 저장소를 생성했다면 이제 로컬 저장소와 연결해야 합니다. 기존 로컬 저장소와 연결하거나 새 로컬 저장소를 생성하여 연결할 수도 있습니다.


로컬 저장소


새 저장소를 생성하면 깃허브에 다음 화면이 나옵니다. 이 화면은 저장소를 생성할 때 README 체크 여부에 따라 달라집니다. README를 체크하지 않으면 다음과 같이 초기화 및 복제 방법을 안내합니다.

그림 5-5] 깃허브에서 새 저장소 생성
깃허브에서 새 저장소 생성

원격 저장소에 연결하려면 먼저 로컬 저장소가 있어야 합니다. 로컬 저장소를 원격 저장소에 연결하는 방법은 크게 두 가지입니다.

  • 1) 새로운 로컬 저장소를 생성하고 원격 저장소를 연결하는 방법
  • 2) 기존 저장소를 연결하는 방법

책에서는 1 방법으로 원격 저장소에 연결해 보겠습니다. 먼저 새 로컬 저장소를 생성하고 초기화합니다.

$ mdkir gitstudy05 ☜ 새로운 실습 폴더를 생성합니다.
$ git init ☜ 저장소를 깃으로 초기화합니다.
Initialized empty Git repository in E:/gitstudy05/.git/

그리고 저장소의 소개 페이지 파일을 하나 생성합니다. echo 명령어로 문자열을 파일로 리다이렉션하여 소개 페이지를 만듭니다. 또는 직접 편집기를 이용하여 만들어도 됩니다.

$ echo "# gitstudy05" >> README.md ☜ 파일 생성

만든 README.md 파일을 추적 등록하고 커밋합니다.

$ git add README.md ☜ 스테이지 등록
$ git commit -m "first commit" ☜ 커밋

안내에 따라 새 로컬 저장소를 생성한 후 README.md 파일을 만들어 추적 등록, 커밋했습니다. 몇 가지 개념을 좀 더 알아본 후 5.3.5절에서 로컬 저장소와 원격 저장소를 연결해 보겠습니다.


프로토콜


서버와 통신하려면 프로토콜을 사용해야 합니다. 깃은 서버와 통신할 수 있는 다양한 프로토콜을 지원합니다. 깃은 기본적으로 Local, HTTP, SSH, Git 네 종류의 전송 방식을 지원합니다.

  • Local(로컬) 로컬 컴퓨터에 원격 저장소를 생성하는 것을 의미합니다. 이 방식은 자신의 컴퓨터를 NFS (Network File System) 등 서버로 이용할 때 편리합니다.

로컬 저장소를 서버로 이용할 때는 폴더 경로만 입력하면 됩니다.

$ git remote add 원격저장소별칭 폴더경로

로컬은 간단하게 원격 서버를 구축할 수 있을 뿐만 아니라 빠른 동작이 가능합니다. 하지만 모든 자료가 자신의 컴퓨터에 집중되는 위험도 있습니다.

  • HTTP
    깃은 HTTP 방식의 프로토콜을 지원합니다. HTTP는 SSH처럼 많이 사용하는 프로토콜 중 하나입니다. 깃허브, 비트버킷 같은 호스팅 서비스도 기본 HTTP 프로토콜을 지원합니다.

서버에 접속하려면 로그인 절차를 거쳐야 합니다. HTTP는 기존 아이디와 비밀번호만으로 접속자를 인증하여 처리할 수 있습니다. HTTP는 익명으로도 처리할 수 있으며, 계정을 이용하여 처리할 수도 있습니다.

  • SSH
    SSH는 깃에서 권장하는 프로토콜로, 높은 수준의 보안 통신으로 처리하기 때문에 깃 서버를 좀 더 안전하게 운영할 수 있습니다. SSH 프로토콜을 사용하려면 주소 앞에 ‘ssh://계정@주소’처럼 프로토콜 타입을 지정해야 합니다. 계정을 생략하여 현재 로그인된 사용자로 대체할 수도 있습니다.

SSH 접속을 할 때는 인증서를 만들어 사용합니다. 인증서를 만들어 접속하면 별도의 회원 로그인 절차를 거치지 않아도 됩니다. 인증서는 공개키와 개인키로 구분하는데 공개키는 서버에 등록하며, 개인키는 로컬에 저장합니다.

SSH는 HTTP와 달리 익명으로 접속할 수 없습니다. 이러한 점이 기업에서 깃 서버를 운영할 때 적합한 프로토콜이라고 할 수 있습니다.

  • Git Git 프로토콜은 깃의 데몬 서비스를 위한 전용 프로토콜 방식을 의미합니다. SSH와 유사하지만 인증 시스템이 없어 보안에 취약할 수 있습니다. 실제로 이 프로토콜은 잘 사용하지 않는 편입니다.


원격 저장소의 리모트 목록 관리


깃은 원격 저장소(서버)를 관리하는 데 remote 명령어를 사용합니다. remote 명령어를 사용하면 현재 연결된 원격 저장소 목록을 확인할 수 있습니다. 동시에 등록과 취소 등 작업을 할 수 있습니다.

remote 명령어에는 다양한 옵션이 있으며, -help 옵션으로 확인할 수 있습니다. 명령어 하나로 다수의 리모트 작업을 하기 때문에 몇 가지 옵션은 반드시 알고 넘어가야 합니다. 5.3.5~5.3.8절에 걸쳐 알아볼 것입니다.

remote 명령어를 독립적으로 사용하면 연결된 원격 저장소의 이름(별칭)을 출력합니다. 간단하게 원격 저장소 목록만 확인할 때 편리합니다.

$ git remote

-v 옵션을 같이 사용하면 원격 저장소의 별칭 이름과 URL을 확인할 수 있습니다.

$ git remote -v

깃은 복수의 원격 저장소를 연결하여 사용할 수 있습니다. 리모트 저장소가 여러 개 있을 때는 목록을 모두 출력합니다. 하지만 저장소의 권한 정보까지는 알 수 없습니다.


주소와 별칭


로컬 저장소에 원격 저장소(서버)를 등록하려면 서버 주소가 필요합니다. 깃허브 같은 저장소를 이용해 보면 프로토콜 + 도메인 주소 형태로 된 것을 알 수 있습니다. 로컬에 서버 저장소를 생성할 때는 폴더 경로를 사용할 수 있습니다.

  • 별칭: 원격 서버의 주소는 긴 문자열로 되어 있습니다. 매번 원격 서버에서 작업할 때마다 긴 문자열을 입력하는 것은 피곤합니다. 간략하게 긴 서버 URL 문자열을 별칭으로 만들어 사용할 수 있습니다.

  • origin: origin은 대표적으로 사용하는 별칭입니다. 기본적으로 원격 서버와 연결할 때 별칭으로 origin을 사용하는 것을 많이 볼 수 있습니다. 하지만 자신의 목적에 따라 다른 이름을 사용해도 괜찮습니다.


원격 저장소에 연결


이제 원격 저장소와 연결해 보겠습니다. 원격 저장소와 연결하려면 add 옵션을 사용합니다.

$ git remote add 원격저장소별칭 원격저장소URL

원격 저장소를 추가할 때는 인자 값으로 원격 저장소 별칭과 원격 저장소의 URL을 같이 입력합니다. 별칭은 앞에서도 이야기했듯이, 서버 주소가 길기 때문에 쉽게 작업하려고 사용하는 별명입니다.

infoh@hojin MINGW64 /e/gitstudy05 (master)
$ git remote add origin https://github.com/jinygit/gitstudy05.git

infoh@hojin MINGW64 /e/gitstudy05 (master)
$ git remote -v ☜ 원격 저장소 목록 확인
origin  https://github.com/jinygit/gitstudy05.git (fetch)
origin  https://github.com/jinygit/gitstudy05.git (push)

원격 저장소가 연결되면 fetch와 push 두 주소를 출력합니다. push(푸시)는 서버로 전송하는 동작을 의미하고, fetch(페치)는 반대로 서버에서 가지고 오는 동작을 의미합니다.

별칭은 중복하여 선택할 수 없습니다.


소스트리에서 원격 브랜치


원격 저장소를 등록하면 기존 master 브랜치와 달리 또 하나의 브랜치가 표시됩니다. 그림 5-6은 서버에 전송했던 실습 화면을 캡처한 것입니다.

그림 5-6] 원격 브랜치
원격 브랜치

master는 현재 로컬 저장소를 의미합니다. 그리고 local/master 같은 별칭/브랜치는 원격 저장소의 브랜치를 의미합니다. 즉, 로컬 저장소와 서버 저장소를 구분하여 표시합니다. 이것으로 서로 동기화한 시점을 판별할 수 있습니다.

Note: 브랜치 개념은 나중에 다시 자세히 설명합니다. 원격 저장소를 등록하면 원격 브랜치가 자동 생성된다는 것만 알고 넘어갑시다.


<a name=”16></a>

별칭 이름 변경과 정보


별칭은 긴 문자열의 서버 주소를 대체합니다. 등록된 서버의 별칭 이름은 다시 변경할 수 있습니다. rename 옵션을 같이 사용합니다.

$ git remote rename 변경전 변경후

remote 명령어는 간략한 원격 저장소 정보만 출력합니다. 원격 저장소의 좀 더 상세한 정보를 확인하고 싶다면 show 옵션을 같이 사용합니다.

$ git remote show 원격저장소별칭

예를 들어 다음과 같이 remote show 명령어를 실행하면 상세한 정보를 출력합니다.

infoh@hojin MINGW64 /e/gitstudy05 (master)
$ git remote show origin
* remote origin
  Fetch URL: https://github.com/jinygit/gitstudy05.git
  Push  URL: https://github.com/jinygit/gitstudy05.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local ref configured for 'git push':
    master pushes to master (up to date)


원격 서버 삭제


로컬 저장소는 복수의 원격 저장소와 연결할 수 있습니다. 깃을 사용하다 보면 풀 리퀘스트(pull request),5 테스트 등 목적으로 임시 등록된 원격 저장소들도 있습니다. 등록된 원격 저장소는 rm 옵션으로 삭제할 수 있습니다.

$ git remote rm 원격저장소별칭

등록한 origin 저장소를 삭제하고, 목록을 다시 확인해 보겠습니다.

infoh@hojin MINGW64 /e/gitstudy05 (master)
$ git remote rm origin

infoh@hojin MINGW64 /e/gitstudy05 (master)
$ git remote -v

이처럼 등록, 변경, 삭제하여 다수의 원격 저장소를 관리할 수 있습니다.

다음 실습을 대비하여 삭제된 원격 저장소를 다시 등록해 놓습니다.

infoh@hojin MINGW64 /e/gitstudy05 (master)
$ git remote add origin https://github.com/jinygit/gitstudy05.git ☜ 삭제 후 재등록