マシン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
)を含みます。