web-dev-qa-db-ja.com

rsyncはどのように競合を解決しますか?

マシンAとマシンBの共有に、以前にrsyncを介して同期したディレクトリがあり、Aがファイルを変更し、Bが同じファイルを変更し、rsyncをAからBに変更した場合はどうなりますか?

おそらくgitでのマージ競合のようなものですか?

競合は簡単に解決できますか?

14
lindhe

Rsyncは競合を解決しようとしません。これはその仕事ではありません。 Rsyncには共通の祖先に関する情報がないため、Rsyncには両側がファイルを変更したことを検出する方法さえありません。

デフォルトのオプションでは、ソースファイルは無条件に宛先にコピーされ、宛先ファイルが上書きされます。オプション-u、コピー先ファイルが見つからないか、コピー元ファイルより古い場合にのみ、コピー元ファイルがコピーされます。オプション--ignore-existing、コピー先ファイルが存在しない場合にのみ、コピー元ファイルがコピーされます。

競合を検出する場合は、ファイルが最後に同期された日時を認識できるツールが必要です。これにより、{destination =古いバージョン、source =新しいバージョン}を{destination =新しいバージョン1、source =新しいバージョン2から区別できます。 }。正確にそれを行う nison を使用します。 Unisonは双方向シンクロナイザーです。前回の同期以降に変更されたファイルを、ファイルが変更されていない側にコピーします。どちらの側も変更されていない場合、または両方の側が同じように変更されている場合は、何もしません。両側が異なる方法で変更されている場合は、通知され、スキップするか、一方向にコピーするか、または他の方向にコピーするかを選択できます。

自動競合解決、つまり自動マージが必要な場合(可能な場合—手動マージが必要な場合は常にあります)、gitなどのリビジョン管理システムを使用します。