2017-06-09 48 views
0

如果有兩個用戶在同一個文件上工作,並且user Auser B之前提交,那麼user A的提交會在沒有警告的情況下被覆蓋。爲什麼svn允許覆蓋以前的提交?

這是爲什麼,有什麼辦法來防止這種情況?

這只是發生在這裏,我不得不通過修補user Auser B的提交後所做的修改。

這似乎是危險的,不能告訴特定文件的基礎尚未更新?

+0

您的文件是二進制文件還是ascii文件? – Stewart

回答

2

SVN將不會僅僅覆蓋userA s提交,除非userB明確要求。這不是偶然發生的事情。

userB嘗試提交他們的文件,SVN會顯示錯誤 enter image description here

現在userB需要做一個SVN更新。有兩種方法,現在這個可以去根據文件類型:

ASCII

SVN真的設計與ASCII(文本)文件的工作。如果您執行SVN更新,它會將userA的更改「合併」到userB的文件中。這意味着任何由userA更改的行將在userB的工作副本中更改。 userB應真正檢查合併以確保更改不會破壞userB正在嘗試執行的操作。如果兩個用戶都改變了相同的行,那麼衝突將被標記。 userB將需要檢查衝突,找出userA正試圖完成什麼,然後手動決定如何做以保留兩個用戶的更改。

二進制

SVN並非真的被設計爲合併二進制文件。當合並適用時,則需要依賴那些爲特定二進制文件真正定製的工具。當userB執行更新時,將會出現衝突,並且userB將無法​​檢查差異併合並文件。如果沒有適用於該特定二進制類型的合併工具,userB將需要接受userA的版本,然後使用任何工具生成該二進制文件重新對二進制文件進行更改。

userB可以通過保存其工作副本的副本,執行svn update,然後恢復副本和提交來繞過此工作流程。這將恢復所有userA的更改。特別是在這種ASCII情況下,這被稱爲沖洗移動。在二進制情況下,兩個用戶應該真正溝通並決定哪兩個用戶需要重做他們的工作。

當在SVN中使用二進制文件時,這可能會成爲一個大問題。解決方案是經常提交或使用acquire lock功能。此外,請務必在處理文件之前立即寫入svn update,並在完成更改後立即寫入svn commit

如果userB剛剛通過拒絕合併破壞了大量工作,那麼您總是可以改變userB的提交方式,並讓他們再次嘗試。