モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

msys gitをWindowsのファイル共有で使ってる時pushに失敗する

gitをチームで使いたい時、githubが使えない場合だと、gitlabやgitoriousのようなgitサーバを立てる必要があると思っていました。
でも実は、Windowsのファイル共有で共有しているフォルダ上にgitのリポジトリを作り、そこをorigin(中央リポジトリ)として使うことで、手軽にチームでgitを利用することが出来ます。


この時注意しないといけないのは、中央リポジトリを作る際に作業ファイルがないリポジトリだというオプション(--bare)と、グループでの書き込みが可能になるようにオプション(--shared)を付けてやることです。

コマンドからだと

> git init --bare --shared

Git Extensions からだと

 Gitコマンド→リポジトリの作成→作業ディレクトリを持たない中央リポジトリ

のチェックを付けて作成することで可能です。


さて、ここからが本題。

これで問題なく出来るはずだったのですが、自分の環境からは問題なくpush出来るもの、他の人の環境からpushしようとすると「permission denied」と言われてコケる、という問題が発生していました。


ファイル共有サーバはLinux上でsambaで動いており、書き込まれたファイルのオーナーは誰が書いても同一ユーザで、ファイルのパーミッションは777で作られるようになっていました。
にもかかわらず、permission deniedってなんで??あとなんで自分の環境からはうまく動くんだろう?と疑問でした。


で実は msys git(mingw版git) だとダメで、cygwin git だと問題ないということがわかりました。
他の人のところに入れた環境では Git Extensions で一発インストールにしていたため、msys gitを使っていたのですが、自分は元々cygwinを利用していたのでcygwinのgitを使っていたのです。


msys gitでも、ローカルでのcommit等は全く問題なく行えています。
なぜmsysgitだとpermission deniedになってしまうのかという、本質的な問題は解決できていません。
ちなみにgitのURLを//サーバ名/パスという形式で書いた場合も、ドライブレターを振ってアクセスした場合もどちらもダメでした。