Windowsでgit cloneするとアクセス権周りの情報が破壊される問題について


【追記】この問題は下記の記事で解決されています

概要

Windowsでgit cloneするとアクセス権周りの情報がおかしくなりバッチファイル等を叩く際にパスが見つからないと言われる事がある。
現状だとバッチファイルを叩けなくなる以外では問題が起きていないがVisual Studioのビルド後イベントでバッチファイルを叩いているとうまく動作しないので問題になる。

再現状況

[1] githubにリポジトリを作成しバッチファイルをpushする。
[2] [1]を行ったPCと別のPC(共同開発している開発者を想定)で「cygwinを使って」git clone
[3] バッチファイルを叩く

結果

「指定されたデバイス、パスまたはファイルにアクセスできません。アクセス許可がない可能性があります。」
といったエラーが表示されバッチファイルを実行できない。

原因

全部がとは言えないけどほぼcygwinが原因。
gitをcygwinで叩いてgit cloneするとクローンしたファイルやフォルダのアクセス権が壊れて【再現状況】のような状態になる。

よってとりあえず回避する場合cygwinを使わずコマンドプロンプトからgit cloneすれば良い。

ただしActivePerlを利用したスクリプトを開発に組み込んでいる場合は結構ややこしい問題にぶち当たる。別の記事としてあげるがUNIX形式のパスに勝手に変換されたりシェルスクリプト上で動く為にWinのコマンドプロンプトで利用可能なコマンドがsystem関数を通して使えなかったりしてはっきりいって使い物にならない。

試したこと

一応試したことを記載しておく。cygwinからgit cloneした後に起きた問題はファイルアクセス権周りなのでその辺りで色々と試した

  • アクセス権の変更(右クリックからエクスプローラの機能で変更)
     他の正しいアクセス権のフォルダと見比べながら併せてみてもバッチファイルは実行できず。

  • コマンドからアクセス権変更
     そもそもls -lsaで所有者やアクセス権を確認すると何も問題が無い。その後アクセス権を変更するコマンドを打っても「アクセス権は正しく変更されている為何もしない」といったメッセージが出てまぁそりゃそうだよなといったところ。当然バッチファイルは実行できず。

  • 管理者実行
     現状唯一の回避策。これだけはまともに動く。

  • ファイル本体のアクセス権をフルコントロールに変更
     実はこれなら「一応は」動作した。一応はというのは「サブフォルダ含めた全ファイルのアクセス権変更」を利用した場合は動作せず、あくまでファイル単体で右クリックしてアクセス権を変更するとうまく動作するという意味。
     しかし当然バッチファイル内で別のバッチを叩いている場合それも変更しなければならず、サブフォルダ含めた全ファイルのアクセス権変更」が利用できないので全てのバッチファイルを片っ端から右クリックで変更しなければならないので現実的ではない。おまけに上記の通りコマンドからの変更ではうまく動作しない為詰んでる。

  • バッチファイルを実行するアプリケーションのデフォルトを変更
     ファイルの関連付けのアレ。cygwinになっているのでは?と思ってレジストリを削除し初期化してみた。まぁ結果はお察し・・・。
     これを試したもうひとつの理由は、パスが見つからないといわれるバッチファイルをコマンドプロンプトにD&Dして実行すれば一応は動作するという現象に遭遇したからだ(一応はというのは上記の通り別のバッチが以下略)。関連付けがcygwinになってるだけかと思ったときはこれでやっと動作すると内心大喜びしたのにごらんの有様で正直もう疲れた・・・