Mac を git の共有レポジトリにする
概要
Mac から Mac に git でレポジトリをpushしたりcloneしたりしようとすると理解不能なエラーが発生してうまくいかなかった。
うまくいかなかったのは、サーバでうまくgitのパスが通ってなかったためだった。
共有レポジトリにアクセスできない
サーバにssh越しでpushできない
例えばクライアントのMacにあるローカルレポジトリをサーバのMacにpushしようとすると、
[ Client ]
$ git push ssh://server/~yuanying/repos/test.git master
zsh: command not found: git-receive-pack
fatal: The remote end hung up unexpectedly
command not found。
アップロードしようとしてるのになんでgit-receive-pack
なんだろうと思いつつも、
クライアントでgit-receive-pack
は確認。
[ Client ]
$ which git-receive-pack
/opt/local/bin/git-receive-pack
ちゃんと通ってる。
サーバからssh越しでcloneできない
同じようにサーバのMacからレポジトリをクライアントのMacにcloneしようとすると、
[ Client ]
$ git clone ssh://server/~yuanying/Projects/MediaWiki/skins.git
Initialized empty Git repository in /Users/yuanying/Projects/skins/.git/
zsh: command not found: git-upload-pack
fatal: The remote end hung up unexpectedly
fetch-pack from 'ssh://fraction.jp/~yuanying/Projects/MediaWiki/skins.git' failed.
なんでクライアントからダウンロードしようとしてるのにgit-upload-pack
なんだと。
結局これが手がかりになったんだけど。
解決編
同じような症状の人を発見。
git-clone -h してみる。
-u, --upload-pack ...
path to git-upload-pack on the remote
リモートのgit-upload-packのパスを指定するらしい。
けどサーバのgitにもPATHはちゃんと~/.zshrc
で通してたよなあ。
~/.zshrcじゃだめっぽい。
たぶん ~/.zshenv に書かないと駄目。
とりあえず試しにサーバにログインして、
[ Remote ]
$ ln -s /Users/yuanying/.zshrc /Users/yuanying/.zshenv
してみる。
ビンゴ。やれやれだ。
てか、うまくいかなかった理由はMacだったからじゃなくて、 gitのパスが /opt/local/bin とか変なところにあって、 zshでちゃんとパスをgitに通してなかったからじゃん!
もしかして git-daemon でエラーが起きてた のも同じ理由かもしれぬ。
参考
- Snow-Wolf.net v5.0 - Serving Git From Mac OS X
- Cururu do Brejo » Blog Archive » bash: git-upload-pack: command not found
感想
ちなみに、git を使い始めて感じたんたことだけど、 git はそのアーキテクチャとか考え方を知っていないとかなり使いづらいツール。
最低限 git を始めるなら、git 作者の「入門Git」は読んでおかないと使い倒せない気がする…。