Ubuntu에서 GIT server를 구축해 보았다.
Server side 새 Project를 위한 계정 생성
git 설치 위에서 생성한 project-a
계정으로 로그인한 후,
$ sudo apt-get install git
.git 저장소 생성 임의의 디렉토리 ~/project-a.git
를 생성한다.
$ mkdir project-a.git
$ cd project-a.git
$ git init --bare --shared
--bare
: 빈 저장소(bare repository)를 생성한다. config 파일의 bare
속성이 true
로 변경된다. bare 설정이 되어있어야 제대로 사용이 가능하다. GIT_DIR
환경설정이 따로 되어있는 경우가 아니라면 현재의 디렉토리를 빈 저장소로 설정한다.--shared
: GIT 저장소의 push 권한을 설정한다. 이 옵션을 사용할 경우 core.sharedRepository
속성이 1
로 설정된다. 이 옵션의 하위 속성으로는 false
, true
, umask
, group
, all
, world
, everybody
, 0xxx
가 있다.
놀랍게도(?) GIT server의 생성이 끝났다.
Client side 서버로부터 git clone하기 위에서 생성한 저장소를 사용할 user의 아이디가 User2
라고 하자.
여기서는 같은 서버에 붙어있는 사용자이므로 주소를 127.0.0.1
로 사용한다.
$ git clone User2@127.0.0.1:/home/project-a /project-a.git
환경설정 $ git config --global user.email "User2@gmail.com"
$ git config --global user.name "User2"
$ git config push.default simple
push.default
: simple
과 matching
두 가지 값을 사용할 수 있으며, 각각의 의미는 다음과 같다.
simple
: 현재 작업 중인 branch에만 push
matching
: 모든 branch에 대해 push
설정값들은 git config --global --list
를 통해 확인할 수 있으며, 기본 설정을 건드리지 않았다면 /home/계정/.gitconfig
에 내용이 저장되어 있다.
push.default
를 설정하지 않아도 크게 상관은 없지만, git push
시 다음과 같은 경고가 발생하기 때문에 미리 설정하는 것이 좋다.
warning: push.default is unset ; its implicit value is changing in
Git 2.0 from 'matching' to 'simple' . To squelch this message
and maintain the current behavior after the default changes, use:
git config --global push.default matching
To squelch this message and adopt the new behavior now, use:
git config --global push.default simple
When push.default is set to 'matching' , git will push local branches
to the remote branches that already exist with the same name.
In Git 2.0, Git will default to the more conservative 'simple'
behavior, which only pushes the current branch to the corresponding
remote branch that 'git pull' uses to update the current branch.
See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)
파일 만들어서 push 하기 $ touch a
$ git add .
$ git commit -m "[temp] make file 'a'."
$ git push
하면, 에러가 난다.
fatal: The remote end hung up unexpectedly
error: 레퍼런스를 'User2@127.0.0.1:/home/project-a/project-a.git' 에 푸시하는데 실패했습니다
GIT 저장소인 /home/project-a/project-a.git에 User2
사용자의 write 권한이 없어서 문제가 발생한 것이다.
다시 Server side group 추가 및 permission 부여 해당 프로젝트 사용자들을 위해 project-a
그룹에 사용자를 추가하자.
$ sudo usermod -a -G project-a User2
그리고 다시 Client side 다시 git push
를 시도한다. 그리고 성공한다.
Counting objects: 3, done.
Writing objects: 100% (3/3), 219 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To User2@127.0.0.1:/home/project-a /project-a.git
* [new branch] master -> master
참조