Windows ファイルサーバーと Git

「Windows 環境に居ると Git を使いたくてもサーバーが無いし…」なんて思ってませんか? Windows の共有フォルダの環境でもちゃんと Git は動きます。 Windows サーバー上に使用可能な共有フォルダーがあればそれで十分使い始めることができます。 サーバー上でサービスやプログラム等を動かす必要はありません。 さっそく始めてみましょう。

Git for Windows を選択しよう

最近の状況だと、Windows で使用する Git と言えば msysGit なのですが、初心者には落とし穴があります。 msysGit の公式ページを見ると、「Git for Windows」と「msysGit」という 2つの配布パッケージがあります。 英語の説明なのでちゃんと見ない人もいるかも知れませんが (?)、一般ユーザー向けは「Git for Windows」と書かれた方なので、「Git for Windows」をダウンロードして使いましょう。 実際のところ、これまでに書かれているほとんどの記事で msysGit と説明されているものは「Git for Windows」のことを指していますが、公式ページ上で「msysGit」と説明されているものは、Git をハックしたい人向けのパッケージなので注意しましょう。

今回は家庭用 NAS を導入して個人で Git を使うために私のやったことをまとめていますが、パーミッション設定をきちんと行えば仕事で使う Windows サーバー上に複数人が使用する Git リポジトリを置くことは可能だと思います。

共有フォルダの参照の仕方

Git for Windows のインストールは簡単です。 デフォルト値の通り、PATH の設定は「Use Git Bash only」、改行コードについては「Checkout Windows-style, commit Unix-style line endings」を選んでおけばよいでしょう。 それと怒られる前にメールアドレスと名前を設定しておきます。

git config --global user.email "youraddress@example.com"
git config --global user.name "Your Name"

ここまで出来てしまえば、後は共有フォルダを以下の形式で参照してベアリポジトリを作るだけです。

//servername/folder/sub_folder/repository

コマンドラインなら以下のようになります。

ローカルのリポジトリを共有フォルダにおく:
$ git clone --bare myproj //server/disk/git/myproj.git

サーバ上に新たにリポジトリを作成:
$ git init --bare //server/disk/git/myproj.git

Git for Windows の GUI

Git for Windows の GUI もそれなりに使えるので、私は結構愛用しています。 リポジトリの複製では、「//server/folder」形式の文字列がローカルと判定されてしまうので、明示的に「全複写」を選んでおくと警告を避けることができます。 (以下、サーバ名は「dragon」です)

ちなみにコマンドラインを使っている分には git clone で特に警告やエラーとならないので、—-no-hardlinks オプションをつけたりする必要はなさそうです。

GUI を使って差分確認すると、改行コードの差は無視 (diff でいう —-strip-trailing-cr オプション) してくれるので手元に CRLF のファイルと LF のみのファイルが入り交じっていても何とかなりますし、エンコーディング指定で SJIS や EUC のファイルも差分確認できるので、特に外部コマンドを設定しなくてもテキストファイルの確認には十分な気がします。

ただし、リポジトリ履歴確認画面 (gitk) では、エンコーディングの指定ができないようです。  gitk でエンコーディングを指定する方法はこちら。

おまけ

本題とはずれますが、関連して実行した作業を簡単にまとめておきます。

CVS からの移行

私は Subversion をスキップして Git 環境に来たので、CVS リポジトリからのインポートが必要でした。 まずは必要なパッケージをインストールします。

# yum install git-cvs

以下のコマンドでカレントディレクトリの下に CVS のモジュール 1つ分の Git リポジトリ (module.git) を作成します。 CVS モジュールごとに実行しなければなりません。

$ git cvsimport -v -d /usr/local/cvsroot -C module.git modulename

まあ、今どきこの情報を必要としている人はいないかも知れませんが。

Windows 共有フォルダを Linux でも参照する

私の環境では I-O DATA の HDL2-A4.0 がファイルサーバーです。 これは Windows と AppleShare にしか対応していないのですが、Linux マシンからもマウントして使いたいので、/etc/fstab に以下のエントリを作成しました。

//dragon/disk    /mnt/dragon    cifs    password=,noauto    0 0

とりあえず今は買って来たままのパスワードなしの状態で使っています。 起動時の自動マウントはしないように noauto を付けていますが、NAS が 24時間稼働であればこれを外しても良いでしょう。 このように fstab に書いておけば mount コマンド実行が楽になります。

# mount /mnt/dragon