GIT server installation

Ubuntu에서 GIT server를 구축해 보았다.

Server side

새 Project를 위한 계정 생성

$ sudo adduser project-a

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: simplematching 두 가지 값을 사용할 수 있으며, 각각의 의미는 다음과 같다.

  • 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

참조

Share