GitのベアリポジトリをNASに置くことにした

一人でソース管理しているし、正直ベアリポジトリなんて要らないと思ってた。でも、最近いじってたリポジトリでブランチが消せない事態に遭遇。幸い、最新の master は無事だったから問題はなかったけど、さすがにヒヤッとした。それで、保険としてGitのベアリポジトリを用意することにした*1。

GitHubのアカウントは今も作ってないので、代わりにXigmaNASにベアリポジトリを置いて運用する方針に決めた。

XigmaNASにGitを置こうとしたが

最初は「XigmaNASならGitくらい動くだろう」って軽く見てた。でも、実際はGitが入ってないし、無理やりインストールしようとしても容量不足で怒られる始末。仕方なく、NASをSMBでLinuxにマウントして、Linux上でGitを動かす形に落ち着いた。ファイルの実体はNAS上にあるから、多少はマシだろうという判断だ。

設定手順

NAS側の準備

Git用のユーザー(gituser)をXigmaNAS上に作成し、SMBで共有するGit用フォルダを設定した。

Linuxからマウント

作成した共有フォルダをLinux側からマウントする。以下のコマンドを使用した。noperm オプションはNAS側の権限で読み書きするために必要。

sudo mount -t cifs //XigmaNASのアドレス/git_share Linux側のマウント先 -o username=gituser,password=設定,noperm

ベアリポジトリの利用

mount後、普通にGitのベアリポジトリを作成し、 git push origin master が使えるように。
今のところ、 git push は頻繁には行わないので、不要になったらすぐに umount する運用にしている。

post-receiveの設定

念のため、 git push 後にキャッシュを書き出すように sync を行うだけの post-receive フックを設定した。ただ、これがどれだけ効果あるかは正直不明だ。

すべてのベアリポジトリに毎回 post-receive を書くのは手間だったので、Gitのテンプレート機能を活用することにした。テンプレートフォルダにフックの雛形 post-receive.sample を置いて、必要なときだけ名前を変えて使うようにした。

~/.git-templates/hooks/post-receive.sample を書いて

#!/bin/sh

sync

以下で、gitの設定にした。

git config --global init.templateDIR ~/.git-templates

XigmaNAS上のGig bearはWindowsからでも使えるか

ここまで設定しておいて、ふと「WindowsマシンからこのNASのベアリポジトリにアクセスできるのかな?」と不安になった。多分、SMBで共有できればWindowsからも使えるはず。自分のプログラムはマルチプラットフォーム対応のときもあり、Windowsでの動作確認や微調整ができると助かるんだよなぁ。

AI先生によるとネットワークパスでGit pull/pushは推奨しないそうなので、zドライブにマウントすることした。
さっそく、 git clone /z/my_projects/pomodoro.git とすると

fatal: detected dubious ownership in repository at 'Z:/my_projects/pomodoro.git'
'Z:/my_projects/pomodoro.git' is owned by:
        (inconvertible) (S-1-5-21-2768214786-1361613841-632331992-1000)
but the current user is:
        YYYYYYYY/XXXXX (S-1-5-21-3988748606-2148608539-3574766069-1001)
To add an exception for this directory, call:

        git config --global --add safe.directory Z:/my_projects/pomodoro.git
fatal: Could not read from remote repository.

と言ってくる。所有者の不一致と言ってくるので、エラーメッセージのまま git config を行うことで、git pullは出来た。
今、Windows上で動かす物はないので確認しなかったが、pullまでできればpush出来るでしょ。

*1:複数マシンで作業するときだけ、その場しのぎで同じフォルダにベアリポジトリを作ってた