Trans:Git

Gentoo Korea Wiki
둘러보기로 가기 검색하러 가기

도입

Git은 버전 관리 시스템입니다. 소스코드를 완성해 나가기 위한 변경 내용을 유지하는 등의 용도로 사용합니다. 변경 내용은 비록 중요하지 않을 수도 있겠지만 여러 사람이 자주 만듭니다. CVS, Subversion, Mercurial, Bazaar 등의 유사한 도구들도 있습니다. Git은 중앙 저장소를 필요로 하지 않는다는 의미의 분산 소스 제어 관리 시스템입니다. 그렇지만 Git은 중앙 저장소 작업 흐름선상에 위치할 수 있으며, 종종 그렇게도 사용합니다.

Git은 본래 리눅스 커널의 개발을 관리하기 위해 리누스 토발즈가 개발 했습니다. 비교적 최근에 수많은 대형 프로젝트에 이것을 채택했습니다.

설치


코드 예제 2.1: Git 설치하기
$ emerge --ask --verbose dev-vcs/git


이 명령을 실행하면 클라이언트와 서버를 둘다 설치할 것입니다(만 기본적으로 서버는 비활성화 되어 있습니다).

gitk를 사용하고 싶다면 dev-vcs/git에 대한 USE 플래그에 tk를 활성화해야 합니다.

클라이언트 사용하기

네트워크 서버 설정하기

읽기 전용 서버로 설정하는 방법입니다.

서버를 설정하기 위한 저장소의 기본 위치는 /var/git입니다. 여기에 정말 간단한 방법이 있습니다.

서버 설정 파일

git-daemon 설정 파일을 다음처럼 만듭니다.


코드 예제 4.1: /etc/conf.d/git-daemon
# conf.d file for git-daemon

#
# Please check man 1 git-daemon for more information about the options
# git-daemon accepts. You MUST edit this to include your repositories you wish
# to serve.
#
# Some of the meaningful options are:
# --syslog --- Enables syslog logging
# --verbose --- Enables verbose logging
# --export-all --- Exports all repositories
# --port=XXXX --- Starts in port XXXX instead of 9418
#
GITDAEMON_OPTS="--syslog --enable=receive-pack --export-all --base-path=/var/git /var/git"

# To run an anonymous git safely, the following user should be able to only
# read your Git repositories. It should not able able to write to anywhere on
# your system, esp. not the repositories.
GIT_USER="nobody"
GIT_GROUP="nobody"


이 스크립트가 의미하는 것은

  • "내용을 가두어 둘 루트"를 마지막 부분에 /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 할 수 있습니다.

참조