"Trans:Git"의 두 판 사이의 차이

Gentoo Korea Wiki
둘러보기로 가기 검색하러 가기
67번째 줄: 67번째 줄:
 
먼저 데몬은 nobody로 실행할 것입니다. 때문에 nobody 사용자로 전환하고 그 다음의 모든 명령을 쉘에서 실행하도록 합니다.
 
먼저 데몬은 nobody로 실행할 것입니다. 때문에 nobody 사용자로 전환하고 그 다음의 모든 명령을 쉘에서 실행하도록 합니다.
  
{{Example|코드 예제 5.1: nobody 사용자가 되기|<nowiki>$ sudo -u nobody -s</nowiki>
+
{{Example|코드 예제 5.1: nobody 사용자로 실행하기|<nowiki>$ sudo -u nobody -s</nowiki>
 
}}
 
}}
  

2012년 7월 22일 (일) 19:45 판

도입

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를 활성화해야 합니다.

클라이언트 사용하기

네트워크 서버 설정하기

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

서버를 설정하기 위한 저장소의 기본 위치는 /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 할 수 있습니다.

참조