OSX에서 GIT 서버 설정 하기

* Shell 에서 사용자 추가 !!

1. “sudo dscl . -create /Users/username UserShell  /bin/bash”
2. “sudo dscl . -create /Users/username RealName “John Doth””
3. “sudo dscl . -create /Users/username UniquelID 1001″
4. “sudo dscl . -create /Users/username PrimaryGroupID 1000″
5. “sudo dscl . -create /Users/username NFSHomeDirectory /Local/Users/username
6. “sudo dscl . -create /Users/username password”    <<= 암호 입력

* GIT설치
1. 사용자 “git-admin”  추가  ( git 사용자 권한 관리 사용자 )
2. 사용자 “git-repo” 추가     ( git 저장소 관리 사용자 )
3. gitolite 설치

> sudo su - git-repo         ( git-repo 사용자로 변경 )
> git clone http://github.com/sitaramc/gitolite.git (최신코드 받아 오기)
  Cloning into 'gitolite'...
  remote: Counting objects: 8157, done.
  remote: Compressing objects: 100% (3339/3339), done.
  remote: Total 8157 (delta 4970), reused 7769 (delta 4649)
  Receiving objects: 100% (8157/8157), 2.90 MiB | 325 KiB/s, done.
  Resolving deltas: 100% (4970/4970), done.
> ./gitolite/install          ( install 스크립트 실행 )
  use the following full path for gitolite:
  /home/git-repo/gitolite/src/gitolite
> ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/git-admin/.ssh/id_rsa):
공개키를 git-repo로 전송
> scp .ssh/id_rsa.pub git-repo@localhost:/home/git-repo/git-admin.pub

 

git-repo계정에서 git-admin 공개키를 등록한다.
> ./gitolite/src/gitolite setup -pk git-admin.pub
Initialized empty Git repository in /home/git-repo/repositories/gitolite-admin.git/
Initialized empty Git repository in /home/git-repo/repositories/testing.git/

 

git-admin으로 gitolite-admin 저장소를 clone해 온다.

git-admin@git-server:~$ git clone git-repo@localhost:gitolite-admin.git
Cloning into 'gitolite-admin'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
Receiving objects: 100% (6/6), 740 bytes, done.
remote: Total 6 (delta 0), reused 0 (delta 0)

이걸로 환경설정을 끝냈다. 이후 git 저장소와 계정/권한에 관한 작업은 git-admin 계정으로 진행하면 된다.

 

gitolite-admin 디렉토리에는 “keydir”과 “conf” 디렉토리가 있다.

  • keydir : 유저의 ssh 퍼블릭 키를 관리한다.
  • conf : 저장소와 저장소에 대한 권한 관리를 위한 설정 파일이 있다.

 

git 유저로 등록해 보자. 등록 과정은 다음과 같다.

  1. 프로젝트에 새로운 개발자가 참여하게 됐다. 이 개발자를 git server에 등록해야 한다.
  2. 관리자[1]는 개발자에게 계정이름과 ssh 퍼블릭키를 달라고 요청한다.
  3. 개발자는 ssh-keygen을 이용 퍼블릭 키를 만든다. 계정 이름은 yundream으로 하기로 했다.
  4. 관리자는 (메일 등으로) yundream.pub 파일을 받았다.

관리자는 git-admin 계정에서 yundream.pub 파일을 등록하면 된다.

git-admin@git-server # mv yundream.pub gitolite-admin/keydir/
git-admin@git-server # ls gitolite-admin/keydir/
git-admin.pub  yundream.pub

 

yundream.pub 파일을 push 한다.

git-admin@git-server # git add yundream.pub
git-admin@git-server # git commit -a -m "yundream account add"
git-admin@git-server # git push

 

추가한 계정으로 testing.git을 clone해보자. commit, push 까지 성공했다면 OK.

# git clone git-repo@git-server:testing.git

 

 

 

저장소 권한 설정

gitolite-admin 계정으로 저장소와 저장소에 대한 권한을 설정할 수 있다. 설정파일 gitolite.conf를 열어보자.

git-admin@git-server # cat ~/conf/gitolite.conf
repo gitolite-admin
    RW+     =   git-admin

repo testing
    RW+     =   @all
  • repo : 저장소 이름
  • RW나 RW+ 는 권한이다.
  • 권한 뒤에는 권한을 가지는 유저나 그룹을 명시한다. 앞에 @이가 붙으면 그룹이다. @all 모든 유저를 의미한다.

그룹은 아래와 같이 설정할 수 있다.

@oss_repos      = linux perl rakudo git gitolite
@secret_repos   = fenestra pear

@admins         = scott     # Adams, not Chacon, sorry 🙂
@interns        = ashok     # get the spelling right, Scott!
@engineers      = sitaram dilbert wally alice
@staff          = @admins @engineers @interns

권한은 R, RW, RW+, -가 있다.

  • R : 읽기만 할 수 있다.
  • RW : 저장소에 쓸 수 있다. 새로운 저장소를 만들 수도 있다.
  • RW+ : 저장소를 삭제할 수도 있다.
  • – : 접근 거부

브랜치 단위로 권한을 줄 수 있지만 파일 단위로도 권한을 제어할 수 있다. 예를 들어 Makefile 같은 경우에는 아무나 건드리면 안될 거다. 다음과 같이 특정 그룹만 접근하도록 할 수 있다.

repo foo
   RW      = @junior_devs @senior_devs

    RW  NAME/           =   @senior_devs
    -   NAME/Makefile   =   @junior_devs
    RW  NAME/           =   @junior_devs

이제 myproj 이라는 새로운 그룹을 만들어 보자.

repo myproj
   RW+   = yundream

위 내용을 추가하고 push하면 저장소가 만들어지고 권한까지 설정 된다.

git-admin@git-server # git commit -a -m "myproj repository create"
[master 91e2144] myproj repository create
 1 file changed, 3 insertions(+)
git-admin@git-server # git push

 

레파지토리 추가

git init –bare  레파지토리이름.git

연속할때는..
git clone ssh://사용자아이디@서버주소/Users/git-repo/레파지토리이름.git

 

 

참고 :: http://git-scm.com/book/ko/v1/Git-서버-Gitolite

http://www.tomdalling.com/blog/software-processes/how-to-set-up-a-secure-git-server-at-home-osx/