Rsync
rsync 如何解決衝突?
如果機器 A 和機器 B 共享以前通過 同步的目錄
rsync
,並且 A 更改了一個文件,B 更改了同一個文件,而您rsync
從 A 到 B,該怎麼辦?是否可能類似於合併衝突
git
?衝突能輕易解決嗎?
Rsync 不會嘗試解決衝突。這不是它的工作。Rsync 甚至沒有辦法檢測到雙方都修改了文件,因為它沒有任何共同祖先的資訊。
使用預設選項,源文件無條件複製到目標,覆蓋目標文件。使用選項
-u
,僅當目標文件失去或比源文件舊時才複製源文件。使用選項--ignore-existing
,僅當目標文件不存在時才複製源文件。如果要檢測衝突,則需要一個知道文件上次同步時間的工具,以便它可以區分 {destination = old version, source = new version} 和 {destination = new version 1, source = new version 2 }。使用Unison,它正是這樣做的。Unison 是一個雙向同步器:它將自上次同步以來修改過的文件複製到文件未修改的一側。如果雙方都沒有被修改,或者如果雙方都被相同的修改,它什麼也不做。如果兩邊都以不同的方式進行了修改,它會告訴您並讓您選擇跳過、向一個方向複製或向另一個方向複製。
如果您想要自動解決衝突,即自動合併(如果可能——總是存在需要手動合併的情況),請使用 git 等修訂控制系統。