: O. Yuanying

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 でエラーが起きてた のも同じ理由かもしれぬ。

参考

感想

ちなみに、git を使い始めて感じたんたことだけど、 git はそのアーキテクチャとか考え方を知っていないとかなり使いづらいツール。

最低限 git を始めるなら、git 作者の「入門Git」は読んでおかないと使い倒せない気がする…。