-
1. 시작하기
-
2. Git의 기초
- 2.1 Git 저장소 만들기
- 2.2 수정하고 저장소에 저장하기
- 2.3 커밋 히스토리 조회하기
- 2.4 되돌리기
- 2.5 리모트 저장소
- 2.6 태그
- 2.7 Git Alias
- 2.8 요약
-
3. Git 브랜치
-
4. Git 서버
- 4.1 프로토콜
- 4.2 서버에 Git 설치하기
- 4.3 SSH 공개키 만들기
- 4.4 서버 설정하기
- 4.5 Git 데몬
- 4.6 스마트 HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 또 다른 선택지, 호스팅
- 4.10 요약
-
5. 분산 환경에서의 Git
- 5.1 분산 환경에서의 워크플로
- 5.2 프로젝트에 기여하기
- 5.3 프로젝트 관리하기
- 5.4 요약
-
6. GitHub
- 6.1 계정 만들고 설정하기
- 6.2 GitHub 프로젝트에 기여하기
- 6.3 GitHub 프로젝트 관리하기
- 6.4 Organization 관리하기
- 6.5 GitHub 스크립팅
- 6.6 요약
-
7. Git 도구
- 7.1 리비전 조회하기
- 7.2 대화형 명령
- 7.3 Stashing과 Cleaning
- 7.4 내 작업에 서명하기
- 7.5 검색
- 7.6 히스토리 단장하기
- 7.7 Reset 명확히 알고 가기
- 7.8 고급 Merge
- 7.9 Rerere
- 7.10 Git으로 버그 찾기
- 7.11 서브모듈
- 7.12 Bundle
- 7.13 Replace
- 7.14 Credential 저장소
- 7.15 요약
-
8. Git맞춤
- 8.1 Git 설정하기
- 8.2 Git Attributes
- 8.3 Git Hooks
- 8.4 정책 구현하기
- 8.5 요약
-
9. Git과 여타 버전 관리 시스템
- 9.1 Git: 범용 Client
- 9.2 Git으로 옮기기
- 9.3 요약
-
10. Git의 내부
- 10.1 Plumbing 명령과 Porcelain 명령
- 10.2 Git 개체
- 10.3 Git Refs
- 10.4 Packfile
- 10.5 Refspec
- 10.6 데이터 전송 프로토콜
- 10.7 운영 및 데이터 복구
- 10.8 환경변수
- 10.9 요약
-
A1. 부록 A: 다양한 환경에서 Git 사용하기
- A1.1 GUI
- A1.2 Visual Studio
- A1.3 Eclipse
- A1.4 Bash
- A1.5 Zsh
- A1.6 Git in Powershell
- A1.7 요약
-
A2. 부록 B: 애플리케이션에 Git 넣기
-
A3. 부록 C: Git 명령어
- A3.1 설치와 설정
- A3.2 프로젝트 가져오기와 생성하기
- A3.3 스냅샷 다루기
- A3.4 Branch와 Merge
- A3.5 공유하고 업데이트하기
- A3.6 보기와 비교
- A3.7 Debugging
- A3.8 Patch 하기
- A3.9 Email
- A3.10 다른 버전 관리 시스템
- A3.11 관리
- A3.12 Plumbing 명령어
4.4 Git 서버 - 서버 설정하기
서버 설정하기
서버에서 설정하는 일을 살펴보자.
일단 Ubuntu같은 표준 Linux 배포판을 사용한다고 가정한다.
사용자들은 아마도 authorized_keys
파일로 인증할 것이다.
노트
|
|
먼저 git
계정을 만들고 사용자 홈 디렉토리에 .ssh
디렉토리를 만든다:
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
authorized_keys
파일에 SSH 공개키를 추가해야 사용자가 접근할 수 있다.
추가하기 전에 이미 알고 있는 사람의 공개키를 받아서 가지고 있다고 가정한다.
공개키가 어떻게 생겼는지 다시 한번 확인하자.
$ cat /tmp/id_rsa.john.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv
O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq
dAv8JggJICUvax2T9va5 gsg-keypair
.ssh
디렉토리에 있는 authorized_keys
파일에 추가한다:
$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
--bare
옵션을 주고 git init
를 실행해서 워킹 디렉토리가 없는 빈 저장소를 하나 만든다.
$ cd /srv/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /srv/git/project.git/
이제 John, Josie, Jessica는 이 저장소를 리모트 저장소로 등록하고 나서 브랜치를 Push 할 수 있다.
프로젝트마다 적어도 한 명은 서버에 접속해서 Bare 저장소를 만들어야 한다.
git
계정과 저장소를 만든 서버의 호스트 이름이 gitserver
라고 하자.
만약 이 서버가 내부망에 있고 gitserver
가 그 서버를 가리키도록 DNS에 설정하면 아래와 같은 명령을 사용할 수 있다(myproject
프로젝트가 이미 있다고 가정한다).
# on John's computer
$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git remote add origin git@gitserver:/srv/git/project.git
$ git push origin master
이제 이 프로젝트를 Clone 하고 나서 수정하고 Push 할 수 있다.
$ git clone git@gitserver:/srv/git/project.git
$ cd project
$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master
이렇게 개발자들이 읽고 쓸 수 있는 Git 서버를 쉽게 만들 수 있다.
이 개발자들은 서버에 git
계정으로 로그인할 수 있다.
이를 막으려면 passwd
파일에서 로그인 셸을 바꿔야한다.
단순히 로그인 셸을 git-shell
로 바꾸기만 하면 git
계정으로는 git
만 사용할 수 있다.
이 로그인 셸은 서버의 다른 부분은 건들 수 없도록 돼있다.
git-shell
을 사용자의 로그인 셸로 지정해야 한다.
/etc/shells
에 git-shell
를 추가한다. 아래를 보자.
$ cat /etc/shells # 이미 `git-shell` 이 등록돼 있는지 확인
$ which git-shell # git-shell 실행파일이 설치돼 있는지 확인
$ sudo vim /etc/shells # 바로 위 명령으로 확인한 git-shell 실행파일의 절대경로를 추가
chsh <계정이름> -s <shell>
명령어를 이용해서 특정 계정의 셸을 바꿀 수 있다.
$ sudo chsh git # git-shell 경로를 입력, 보통 /usr/bin/git-shell 임
이제 git 계정으로 Push 와 Pull 할 수 있지만 서버의 셸은 가질 수 없다. 로그인하려고 하면 아래와 같이 로그인 불가능 메시지만 보게 될 것이다.
$ ssh git@gitserver
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.
이제 Git은 제대로 동작하면서 개발자들이 셸을 얻지 못하게 되었다.
위의 출력에서 볼 수 있듯이 git
계정의 홈 디렉토리에 git-shell-commands
디렉토리를 만들어 git-shell
의 동작을 조금 바꿀 수 있다.
예를 들면 서버에서 사용할 수 있는 Git 명령어를 제한할 수 있다. 또 명령어를 실행했을 때 나오는 메시지도 변경 할 수 있다.
git help shell
명령어를 실행하면 Git 셸을 꾸미는 데에 필요한 정보를 얻을 수 있다.