git: ‘/repos/myrepos.git’ is not a git command. See ‘git –help’. って言われる時の対処法

2011/07/15 金曜日 - 18:09:10 by かなだ
なぜか、新しくリポジトリを作った時に
git remote add origin username@server.example.com:/repos/myrepos.git
とやってローカルからリモートを指定して、
git push origin master
とやると、
$ git push origin master git: '/repos/myrepos.git' is not a git command. See 'git --help'. fatal: The remote end hung up unexpectedly
ってなってうまくいかないことがあります。原因を探ってみましょう。GIT_TRACE環境変数を1にセットしてもう一回やってみます。
$ GIT_TRACE=1 git push origin master trace: built-in: git 'push' 'origin' 'master' trace: run_command: 'ssh' 'username@server.example.com' 'git-receive-pack '\/repos/myrepos.git’\’ git: ‘/repos/myrepos.git’ is not a git command. See ‘git –help’. fatal: The remote end hung up unexpectedly
どうも「git-receive-pack」の引数にgitのコマンドを期待しているようです。git-receive-packはgit receive-packと等価で、コマンドは渡された状態のはずなのですが。
git-receive-packは単なるgitへのハードリンクなのでそのあたりが原因なのかもしれませんがよくわかりません。とりあえず以下のようにしてみます。
git config --global remote.origin.receivepack "git receive-pack"
で、もっかいやってみましょう。
$ GIT_TRACE=1 git push origin master trace: built-in: git 'push' 'origin' 'master' ***この行***trace: run_command: 'ssh' 'username@server.example.com' 'git receive-pack '\/repos/myrepos.git’\’ Counting objects: 79, done. Compressing objects: 100% (63/63), done. Writing objects: 100% (79/79), 46.69 KiB, done. Total 79 (delta 13), reused 0 (delta 0) To username@server.example.com:/repos/repos.git * [new branch] master -> master
git-receive-packの代わりにgit receive-packとするとうまくいくようです。