git鯖の構築 -1-

Ubuntu Server 11.04をインストールしたMac miniでGitサーバーを構築する。

kinneko@gitsv:~$ sudo apt-get install git
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  emacsen-common git-man liberror-perl
Suggested packages:
  git-doc git-el git-arch git-cvs git-svn git-email git-daemon-run git-gui
  gitk gitweb
The following NEW packages will be installed:
  emacsen-common git git-man liberror-perl
0 upgraded, 4 newly installed, 0 to remove and 81 not upgraded.
Need to get 5278 kB of archives.
After this operation, 12.5 MB of additional disk space will be used.
(snip)

はいったバージョン。

kinneko@gitsv:~$ git --version
git version 1.7.4.1


パッケージを最新に更新しておく。

kinneko@gitsv:~$ sudo apt-get update
kinneko@gitsv:~$ sudo apt-get upgrade
(snip)
78 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 47.2 MB of archives.
After this operation, 225 kB of additional disk space will be used.
(snip)

まだ、とりあえずの運用なので、IPアドレスDHCPで。
更新は、LAN内から行ない、公開はhttpでダウンロードのみの予定。
kernel上がったな。再起動できるか確認しないと。
問題なく再起動できた。


まずは共有リポジトリを作る。
ディレクトリは、varに作るのが一般的なのかな?

kinneko@gitsv:~$ sudo mkdir -p /var/git/EVT/test.git
kinneko@gitsv:~$ cd /var/git/EVT/test.git
kinneko@gitsv:/var/git/EVT/test.git$ sudo git --bare init --shared
Initialized empty shared Git repository in /var/git/EVT/test.git/

開発者グループを作って、ユーザーを登録し、オーナーを変更する。

kinneko@gitsv:/var/git/EVT/test.git$ sudo groupadd developer
kinneko@gitsv:/var/git/EVT/test.git$ sudo usermod -G developer kinneko
kinneko@gitsv:/var/git/EVT/test.git$ sudo chown root:developer -R ./


LAN内のLinuxマシンから、リポジトリにデータを登録する。

kinneko@BuildSV:~$ mkdir test
kinneko@BuildSV:~$ cd test/
kinneko@BuildSV:~/test$ git init
Initialized empty Git repository in /home/kinneko/test/.git/
kinneko@BuildSV:~/test$ touch test.dat
kinneko@BuildSV:~/test$ ls -l
total 0
-rw-r--r-- 1 kinneko kinneko 0 Jul 27 18:51 test.dat
kinneko@BuildSV:~/test$ git add .
kinneko@BuildSV:~/test$ git commit -m "Test Commit"
[master (root-commit) 17aa57a] Test Commit
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test.dat
kinneko@BuildSV:~/test$ git log
commit 17aa57a149b74d1c84f7ea71049ad2d120b61cc3
Author: kinneko <kinneko@gmail.com>
Date:   Fri Jul 27 18:53:16 2012 +0900

    Test Commit

サーバーに登録する。

kinneko@BuildSV:~/test$ git remote add origin ssh://192.168.1.100/var/git/EVT/test.git
kinneko@BuildSV:~/test$ git push origin master
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is 74:72:ee:23:c0:29:29:a4:46:3f:6f:a7:81:f2:ff:b8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.100' (ECDSA) to the list of known hosts.
kinneko@192.168.1.100's password: 
Counting objects: 3, done.
Writing objects: 100% (3/3), 206 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://192.168.1.100/var/git/EVT/test.git
 * [new branch]      master -> master

ssh初回なので、鍵を受け入れるか聞かれた。
鍵を登録しておけば、パスワードもなしで同期できる。


サーバー側で登録を確認。

kinneko@gitsv:/var/git/EVT/test.git$ git log
commit 17aa57a149b74d1c84f7ea71049ad2d120b61cc3
Author: kinneko <kinneko@gmail.com>
Date:   Fri Jul 27 18:53:16 2012 +0900

    Test Commit

ちゃんと来ている。


ローカルで作ったものを破棄して、新しく同期してみる。

kinneko@BuildSV:~/test$ cd ../
kinneko@BuildSV:~$ rm -rf test/
kinneko@BuildSV:~$ git clone ssh://kinneko@192.168.1.100/var/git/EVT/test.git
Cloning into test...
kinneko@192.168.1.100's password: 
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
kinneko@BuildSV:~$ cd test/
kinneko@BuildSV:~/test$ ls -l
total 0
-rw-r--r-- 1 kinneko kinneko 0 Jul 27 18:58 test.dat
kinneko@BuildSV:~/test$ git log
commit 17aa57a149b74d1c84f7ea71049ad2d120b61cc3
Author: kinneko <kinneko@gmail.com>
Date:   Fri Jul 27 18:53:16 2012 +0900

    Test Commit

問題なし。
ファイルを追加して同期してみる。

kinneko@BuildSV:~/test$ touch test2.dat
kinneko@BuildSV:~/test$ git add test2.dat
kinneko@BuildSV:~/test$ git commit -m "add test2.dat"
[master 95f79c3] add test2.dat
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test2.dat
kinneko@BuildSV:~/test$ git push origin master
kinneko@192.168.1.100's password: 
Counting objects: 3, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 231 bytes, done.
Total 2 (delta 0), reused 0 (delta 0)
To ssh://kinneko@192.168.1.100/var/git/EVT/test.git
   17aa57a..95f79c3  master -> master

問題なし。


sshサーバーさえ上がっていれば、ローカルにやるのとほとんど同じ。
とても簡単。