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 に限らず一般的にやっておくべきことである。

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

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


上の記事は2016年に書いた。当時はCentOSを使っていたが、最近Alma Linuxに乗り換えた。その際にサーバ側のリポジトリが失われてしまったので、再構築した。

まずサーバ側で次のようにしておく。

sudo dnf install git
sudo mkdir /var/git
sudo chown okumura /var/git

git init --bare /var/git/hoge.git

ローカルリポジトリの .git/config

[remote "origin"]
	url = ssh://example.org/var/git/hoge.git

のような記述があるので必要に応じて編集する(例えばsshポート番号を12345に変えたなら ssh://example.org:12345/var/git/hoge.git のように直す)。そして、ローカルリポジトリ内で

git push --mirror ssh://example.org:12345/var/git/hoge.git

とすれば完成である。あるいは

git push --all origin
git push --tags origin

でもよい。