権限の変更後にgitリポジトリを同期するとき、Rsyncはタイムスタンプを考慮しません。

権限の変更後にgitリポジトリを同期するとき、Rsyncはタイムスタンプを考慮しません。

マシンAにgitリポジトリがあります。

フラグを使用して、マシンAからマシンBにrsyncを実行しました。

rsync -zvaP  /media/shihab/development shihab@remote:/media/shihab/OSDisk/development

後で、私はコンピュータBでいくつかのことを変更し、同じフラグを使用してコンピュータBからコンピュータAに再同期しました。

rsync -zvaP shihab@remote:/media/shihab/OSDisk/development /media/shihab/development 

同期中に変更されていないファイルまで同期されることがわかりました。 2 回の同期操作でファイルの所有者と権限が変更されました。リポジトリでgit statusを実行すると、ユーザー権限が変更されたことがわかります。

この問題を解決するために、グローバルとローカルでgit configを変更し、以下を追加しましたcore.filemode=false

git config --global core.fileMode false
git config --local core.fileMode false

また、書き込み権限を忘れるためにrsyncを要求するフラグを同期に追加しましたrsync -zvaP --no-perms --no-owner --no-group。たとえば、

rsync -zvaP --no-perms --no-owner --no-group /media/shihab/development shihab@remote:/media/shihab/OSDisk/development

ただし、これらの変更にもかかわらず、マシンBからマシンAに再同期すると、マシンBの最新のタイムスタンプを持つファイルが以前のタイムスタンプのファイルで上書きされます。一つ作れば見ることができますね--dry-run -i。ファイルはマシンBでは次のようになります。

-rwxrwxrwx 1 shihab shihab 655 2021年11月16日インストール-i3wm.sh*

マシンAでは、次のようになります。

-rwxrwxrwx 1 shihab shihab 681 6月22日 11:06 install-i3wm.sh*

次のようにマシン B からマシン A に rsync する場合:

rsync -zvaP --dry-run -i -t --no-perms --no-owner --no-group shihab@remote:/media/shihab/OSDisk/development /media/shihab/development

私は得る:

f++++++++++ install-i3wm.sh

私は何が間違っていましたか?

答え1

そう言ったじゃないかrsync最新のタイムスタンプのあるファイルを、マシンBの以前のタイムスタンプのあるファイルで上書きしています。」。

2つのファイルが異なるため、ソースと一致するようにターゲットが更新されます。それだけですrsync

ソースがターゲットよりも最新の場合にのみファイルを更新したい場合は、rsyncこれが必要な修正動作であることを知っておく必要があります。この場合は-u--update)を含みます。

関連情報