git プロジェクトをコピーした後、ファイルのアクセス許可が不可解に変更されました (モード変更 100644 => 100755)。

git プロジェクトのバッチをあるデバイスから別のデバイスにコピーした後、ファイルには変更が加えられませんでしたが、プロジェクトのルート ディレクトリに入って実行すると、すべてのファイルのステータスが であることがわかりましgit statusmodified

変な気がする

実行する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

おすすめ

転載: blog.csdn.net/uwoerla/article/details/131058037