私が使用しているコードベースは、GitリポジトリからLinuxマシンにチェックアウトされています。実動コードはLinuxにデプロイされるように作成されているため、すべてのテストはLinuxマシンで行いますが、コード編集/オーサリングなどの日常的な使用にはWindowsを使用します。
そのために、次のように、コードをチェックアウトするフォルダー(ホームフォルダー)のSamba共有を作成しました。
[wgrover]
path = /home/wgrover
available = yes
valid users = wgrover
read only = no
browsable = yes
public = yes
writable = yes
ただし、Windowsでsamba共有\\linux-box\wgrover
からファイルを編集すると、Linuxでのファイル許可は、編集前に755
であったにもかかわらず644
に変わり続けます 。
これは私のgit diff
に次のように表示され続けます:
diff --git a/debian/maggie.nginx.conf b/debian/maggie.nginx.conf
old mode 100644
new mode 100755
index 7cda506..7eab574
Smb.confでcreate mask
を設定することは可能ですが、これは元のファイルのアクセス権を「保持」しません。 fileMode = false
で.gitconfig
を設定することにより、gitでのファイルモードの変更を無視できますが、これも問題を無視します。
linuxから変更されたファイルのパーミッションを保持する方法はありますか?
許可が変更された理由を最終的に把握できました。混乱は、Sambaのデフォルト値であるmap archive = yes
設定から生じました。 map archive = no
を設定した後、所有者の実行ビットは、期待どおりに動作し始めました。
ここでドキュメントを読んで答えを見つけました: http://www.samba.org/samba/docs/using_samba/ch08.html inFile Permissions and MS-DOSおよびUnixセクションの属性。この副作用について明確に言及しています:
したがって、Sambaディスク共有のファイルに存在する3つのUnix実行可能ビットのいずれも使用できません。ただし、DOSファイルには、Unix環境に保存するときに保存する必要がある独自の属性(アーカイブ、システム、隠しビット)があります。 Sambaは、Unix側でファイルの実行許可ビットを再利用することにより、これらのビットを保持できます(指示されている場合)。ただし、これらのビットのマッピングには不幸な副作用があります。WindowsユーザーがファイルをSamba共有に保存し、
ls -al
コマンドを使用してUnixで表示すると、実行可能なビットの一部が意味を成しませんそれらを期待しています。
ただし、このことにも言及しています。
map archive
オプションのデフォルト値はyes
であり、他の2つのオプションのデフォルト値はno
であることに注意してください。これは、DOSおよびWindowsファイルのアーカイブビットが正しく保存されていない場合、多くのプログラムが正しく動作しないためです。ただし、システムと非表示の属性はプログラムの動作にとって重要ではなく、管理者の裁量に任されています。
アーカイブビットの詳細については、こちらをご覧ください: http://en.wikipedia.org/wiki/Archive_bit