gitサーバ構築

普段はGitHubを使っているが,自分専用のファイルをバージョン管理するのにプライベートリポジトリが欲しい。そこで,自分のCentOS7サーバで構築してみた。リポジトリ名は hoge とする。

sudo yum install git
sudo mkdir -p /var/git/hoge.git
sudo chown okumura:wheel /var/git/hoge.git
cd /var/git/hoge.git
git init --bare # または git init --bare --shared

これで完成である(--shared を付けるのはリポジトリを共有したい場合である。その際には /var/git/hoge.git のグループで管理する)。試しに別マシンから clone してみる。

git clone ssh://example.org/var/git/hoge.git

サーバ側のユーザ名と違うならホスト名の前に ユーザ名@ を付ける。パスワードを聞かれるのが面倒であれば,クライアント側マシン(サーバでないほう)の公開鍵 ~/.ssh/id_rsa.pub の内容をサーバの ~/.ssh/authorized_keys に書き込んでおく(パーミッションは600)。~/.ssh/id_rsa.pub がなければ ssh-keygen -t rsa -C "自分のメアド" で作る。同時にできる秘密鍵 ~/.ssh/id_rsa はパーミッション400にしておく。これらは git に限らず一般的にやっておくべきことである。

[追記] macOS Sierra 10.12.2 から仕様が変わったみたいで,上の設定だけではパスフレーズを毎回聞いてくる。~/.ssh/config というファイルを作って,そこに次のように書いておくと,起動後一回だけで済むようになる:

Host *
        IdentityFile ~/.ssh/id_rsa
        AddKeysToAgent yes

clone の際に “warning: You appear to have cloned an empty repository.” のような警告が出て,hoge という(管理用ディレクトリ .git 以外は空の)ディレクトリが作られる。その中に入って,とりあえず README.md と .gitignore というファイルを作ってサーバ側に送ってみよう。.gitignore にはサーバに送らないファイル名を列挙する。RとLaTeXで作業をするなら例えば

.DS_Store
.Rhistory
*~
\#*
*.dvi
*.aux
*.log
*.toc
*.idx
*.ind
*.ilg
*.out
*.blg

のように書き込んでおく。これで

git add README.md .gitignore
git commit README.md .gitignore -m "initial commit"
git push

のような感じでサーバに送る。