2012-01-27 22 views
7

當運行一個svn up我經常遇到這樣的提示:如何讓SVN爲所有二進制衝突採取特定的解決方案,而不會提示每個二進制衝突?

Conflict discovered in 'lib/somelibrary.so'. 
Select: (p) postpone, 
     (mf) mine-full, (tf) theirs-full, 
     (s) show all options: 

擊中s顯示的選項mctc,礦井衝突和他們的衝突,據稱允許我採取任何我的版本或它們的版本所有衝突,而不僅僅是somelibrary.so

但是,這些選項不起作用。我得到這個消息:

Invalid option; cannot choose based on conflicts in a binary file. 

Edwin的答案清楚地表明,我誤解了如何mctc工作,但我還是希望能夠把每個文件的衝突相同的分辨率。有沒有辦法使svn使用mftf爲每個衝突沒有再次提醒我第一次後?

回答

10

要自動解決svn updatesvn switchsvn merge上的衝突,請使用--accept標誌。

SVN Book - svn options

--accept ACTION
指定自動解決衝突的行動。 可能的行動是推遲,基地,礦井,他們的全面,編輯和發射。每個動作的

含義中可以看出svn resolvespecification

您可以通過以下參數取決於您需要的分辨率 的--accept命令:

基地在更新 您的工作副本之前,請選擇是BASE修訂版的文件。也就是,您在 進行最新修改之前簽出的文件。

工作假定您已經手工處理衝突解決, 選擇文件的版本,因爲它現在站在你的工作 副本。

mine-full解決所有衝突的文件與文件的副本爲 他們立即運行svn更新之前站立。

他們全解決所有衝突的文件與 從您的服務器上運行svn更新時獲取的文件的副本。

礦衝突決心,寧願當地 修改過的每個文件的內容相互矛盾的 地區從服務器獲取的所有的更改有衝突的文件。

他們的衝突決心,寧願變化 從服務器在本地修改獲取在衝突的每個文件的內容 地區所有衝突的文件。

另請查看Resolve Any Conflict部分。

最後一個例子。 自動解決所有衝突,mine-full上更新,執行:

$ svn up --resolve mine-full 
1

mc和tc是合併選項,其中只考慮衝突中的行,然後合併源(mc)或「其他」來源(tc)中的行。

二進制文件通常不是以包含行的方式構造的,因此,基於用另一行文本替換一行文本的衝突解決算法對二進制文件無法正常工作。編寫SVN的開發人員知道這一點,所以在處理二進制文件時,只有文本文件纔有意義的選項將不被接受。

您可以使用mf和tf,它們略有不同。他們不是隻替換文件的衝突區域,而是用整個文件的(mf)「my」副本或(tf)「完整文件的副本」替換整個文件。

如果您希望SVN「關閉並接受mc/tc文件選項」,svn編輯mime類型並將其設置爲文本。祝你好運,如果這不是一個文本文件,賠率是你會得到一個文件,不在任何啓動二進制文件的規格(合併兩個JPEG文件的連續部分,例如,不會產生有效的JPEG文件)。

+0

有道理,謝謝。有了這些知識,有沒有辦法讓svn爲所有文件做'mf'或'tf',而不是每個文件都提示我? – 2012-01-27 21:44:17

+0

衝突中的每個文件可能需要以不同的方式解決。我不太確定在你甚至知道哪些文件存在衝突(或爲什麼)之前,羣衆決定哪種類型的決議是明智的。 – 2012-01-27 22:51:45

+0

問題在於是否可能,而不是我是否應該始終如一。我知道什麼時候纔有意義,什麼時候沒有意義。 – 2012-01-27 22:59:01