Trans:Git
도입
Git은 버전 관리 시스템입니다. 소스코드를 완성해 나가기 위한 변경 내용을 유지하는 등의 용도로 사용합니다. 변경 내용은 비록 중요하지 않을 수도 있겠지만 여러 사람이 자주 만듭니다. CVS, Subversion Mercurial, [http;//bazaar.canonical.com Bazaar] 등의 유사한 도구들도 있습니다. Git은 중앙 저장소를 필요로 하지 않는다는 의미의 분산 소스 제어 관리 시스템입니다. 그렇지만 Git은 중앙 저장소 작업 흐름선상에 위치할 수 있으며, 종종 그렇게도 사용합니다.
Git 본래 리눅스 커널의 개발을 관리하기 위해 리누스 토발즈가 개발 했습니다. 비교적 최근에 수많은 대형 프로젝트에 이것을 채택했습니다.
설치
코드 예제 2.1: Git 설치하기 |
$ emerge --ask --verbose dev-vcs/git |
이 명령을 실행하면 클라이언트와 서버를 둘다 설치할 것입니다(만 기본적으로 서버는 비활성화 되어 있습니다).
gitk를 사용하고 싶다면 dev-vcs/git에 대한 USE 플래그에 tk를 활성화해야 합니다.
클라이언트 사용하기
- 랜덜 슈왈츠의 프리젠테이션을 보세요.
- Git은 온라인에도 복제한 많은 양의 맨 페이지로 문서화 했습니다. 맨 페이지로 이동하세요: docs/.
- 매일의 Git 문서로 이동하세요
네트워크 서버 설정하기
읽기 전용 서버로 설정하는 방법입니다.
서버를 설정하기 위한 저장소의 기본 위치는 /var/git입니다. 여기에 정말 간단한 방법이 있습니다.
서버 설정 파일
git-daemon 설정 파일을 다음처럼 만듭니다.
코드 예제 4.1: /etc/conf.d/git-daemon |
# conf.d file for git-daemon # |
이 스크립트가 의미하는 것은
- "내용을 가두어 둘 루트"를 마지막 부분에 /var/git로 지정합니다
- --export-all 옵션으로 저장소에서 내보내기가 가능하도록 설정합니다. 좀 더 제한을 두고 싶다면 이 옵션을 제거하고 git-daemon-export-ok 파일을 touch 하시기 바랍니다.
- 모든 요청에 대해 미리 준비한 "내용을 가두어 둘 루트"를 만들어서 가져올 임의의 저장소 "가상 리소스"를 만듭니다.
- 모든 저장소는 전세계 모든 사람들이 기록할 권한을 가짐을 알림 받을 것입니다. 신뢰하는 지역망인 경우에만 --enable=receive-pack 을 조심스럽게 적용하시기 바랍니다.
/var/git 디렉터리가 존재하는지 확인합니다 (없으면 git를 시작하지 못합니다). 그렇지 않다면
코드 예제 4.2: /var/git 디렉터리 만들기 |
# mkdir /var/git # chown nobody.nobody /var/git |
그 다음 데몬을 시작합니다.
코드 예제 4.3: git-daemon 시작하기 |
# /etc/init.d/git-daemon start |
어떤 이유 때문인지 조금 시간이 걸릴지도 모릅니다. ( OK대신에 !!가 뜨면 오류입니다)
저장소 설정하기
먼저 데몬은 nobody로 실행할 것입니다. 때문에 nobody 사용자로 전환하고 그 다음의 모든 명령을 쉘에서 실행하도록 합니다.
코드 예제 5.1: nobody 사용자가 되기 |
$ sudo -u nobody -s |
먼저 데몬의 루트 디렉터리 안에 프로젝트 디렉터리를 만듭니다 ("내용을 가두어 둘 루트"를 통해서 입니다)
코드 예제 5.2: 프로젝트 디렉터리 만들기 |
$ cd /var/git $ mkdir myproject |
그 다음 이곳에 모든 파일들을 놓습니다. 이 디렉터리는 clone 할 디렉터리입니다. (중앙 집중형에서 사용하는 용어는 "check out"입니다).
마지막으로 GIT 저장소를 여기에 만들어둡니다.
코드 예제 5.3: git 저장소 초기화하기 |
$ git init |
여러개의 프로젝트가 있다면 위 단계를 따라 각각의 디렉터리를 만듭니다.
사용자가 프로젝트를 가져가려면, 그들에게 다음을 실행하라고 알려줍니다.
코드 예제 5.4: 로컬 위치에 저장소 클론하기 |
$ git clone git://your-server.com/path/to/myproject localdir |
다중 사용자 Git 서버
ssh를 사용하여 Git 서버로 밀어넣을때 새 파일에 대한 소유자는 push를 수행하는 사용자와 관련이 있습니다. 이는 다른 사용자가 같은 저장소를 사용하는 것을 허용하지 않습니다. 한가지 해결 방안이 있다면 사용자에 대한 기본 umask를 변경하는 것인데, 이것은 Git 처리 그 이상의 효과를 가져다줍니다.
POSIX 접근 제어 목록을 사용하면 적당한 방법을 달성할 수 있습니다.
예를 들어 ext4 파일 시스템의 커널에서 ACL을 활성화 하려면, 다음과 같이 체크합니다.
코드 예제 6.1: ext4 파일 시스템에서 PACL 활성화 하기 |
File systems ---> <*> The Extended 4 (ext4) filesystem [*] Ext4 extended attributes [*] Ext4 POSIX Access Control Lists |
그리고 마운트 옵션에 acl을 추가합니다.
코드 예제 6.2: /etc/fstab에서 ext4 마운트 옵션에 acl 추가하기 |
/dev/sda3 / ext4 noatime,acl 0 1 |
gitusers 그룹을 만듭니다
코드 예제 6.3: gitusers 사용자 그룹 만들기 |
$ groupadd gitusers |
제각각의 REPOS git 저장소에 대해 다음을 실행합니다
코드 예제 6.4: 저장소 소유그룹 gitusers로 설정하기 |
$ setfacl -R -d -m g:gitusers:rwX "${REPOS}" |
위 명령으로 저장소의 모든 파일에 대해 gitusers 그룹에 있는 사용자들에게 읽기/쓰기 권한을 설정할 것입니다.
이제 gitusers의 구성원은 저장소를 push/pull 할 수 있습니다.