Windows ACL と cygwin のコピー

釈然としないが、cygwin の世界は cygwin で閉じなければだめという話。 cygwin では Windows の世界を”のぞき見”するために /cygdriver なるものがある。便利だからと言ってこれに頼ってはいけないことがわかってきた。たとえば、d: ドライブに(MS-DOS!!) なにかディスクを追加してそこを Work などにしている場合。
自分の場合は、Windows の特定のツールがディレクトリの文字列制限に引っかかるのとデータを別にするために c: ではなく d: を使っている。そして、ちょこちょこ cygwin からコピーしていた。これだめ。
cygwin の世界から Windows の世界にコピーをしようとすると、WindowsACL を作成しようとする。そして、Windows から見ると妙な ACL になってしまい、特定の Windows アプリケーションからは見えなくなってしまうことがある。アプリケーションがそのような事にも対応していればいいのかもしれないが、うまく対応していないと、Windows からはみえているのにアプリケーションからは見えない(読めない)みたいなことが起こる。
どっかの blog にかいてあったように、最初は /cygdrive すべてを noacl にすればいいのかとおもってやってみていた。そうすると、挙動がおかしい。今度は cygwin から見れないファイルが出来てしまう。
cygwin の世界に Windows のフォルダを取り入れるのには mount を使う。一時的なら mount コマンド、恒常的なら /etc/fstab に書いておく。その時 noacl をつけておくと、 ACL は追加しない。/cygdrive 全体を noacl にするといろんなところの影響が大きすぎるのでお勧めしない。/etc/fstab はこんな感じ。

d:/Works /home/Works ntfs binary,noacl,user 0 0

こんな感じ。mount -m で表示したのをそのままコピペしてもよい。

mount -o noacl,user 'd:/Works' /home/Works

mount -m
D:/Works /home/Works ntfs binary,noacl,user 0 0
none /cygdrive cygdrive binary,posix=0,user 0 0

このように豆に mount することで、git clone 時の ACL の問題などが回避できる。