git プロジェクトのバッチをあるデバイスから別のデバイスにコピーした後、ファイルには変更が加えられませんでしたが、プロジェクトのルート ディレクトリに入って実行すると、すべてのファイルのステータスが であることがわかりまし
git status
たmodified
。変な気がする
実行する
git diff --summary
と、ほとんどの場合mode change 100644 => 100755
、ファイルのコピー処理中にファイルのアクセス許可が自動的に変更され、アクセス許可の値が 644 から 755 に変更されることが判明しました。この状況にどう対処すればよいでしょうか?
git ファイルモードをオフにする
- 世界的なシャットダウン
git config --global core.filemode false
- 単一のプロジェクトを閉じる
git config core.filemode false
ファイルのアクセス許可を変更する (この方法が推奨されます)
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7- | tr '\n' '\0' | xargs -0 chmod -x
git diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | tr '\n' '\0' | xargs -0 chmod -x
git diff --summary | grep --color 'mode change 100644 => 100755'
mode change 100644 => 100755 .gitignore
mode change 100644 => 100755 Makefile
mode change 100644 => 100755 pom.xml
cut -d' ' -f7-
テキストをスペースで切り取り、列 7 の値を取得します (添え字は 1 から始まり、f1 は完全な文字チャネルです)。つまり、ファイルのフルパスです。
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7-
.gitignore
Makefile
pom.xml
tr '\n' '\0'
区切り文字を次から
\n
変更します\0
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7- | tr '\n' '\0'
.gitignoreMakefilepom.xml
xargs -0 chmod -x
\0
区切り文字として使用されます
条件を満たすすべてのファイルのファイル権限を変更します
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7- | tr '\n' '\0' | xargs -0 chmod -x
変更が成功したかどうかを確認する
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7-
逆の操作
ファイルに権限を追加する
git diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | tr '\n' '\0' | xargs -0 chmod +x