如果有兩個用戶在同一個文件上工作,並且user A
在user B
之前提交,那麼user A
的提交會在沒有警告的情況下被覆蓋。爲什麼svn允許覆蓋以前的提交?
這是爲什麼,有什麼辦法來防止這種情況?
這只是發生在這裏,我不得不通過修補user A
user B
的提交後所做的修改。
這似乎是危險的,不能告訴特定文件的基礎尚未更新?
如果有兩個用戶在同一個文件上工作,並且user A
在user B
之前提交,那麼user A
的提交會在沒有警告的情況下被覆蓋。爲什麼svn允許覆蓋以前的提交?
這是爲什麼,有什麼辦法來防止這種情況?
這只是發生在這裏,我不得不通過修補user A
user B
的提交後所做的修改。
這似乎是危險的,不能告訴特定文件的基礎尚未更新?
SVN將不會僅僅覆蓋userA
s提交,除非userB
明確要求。這不是偶然發生的事情。
現在userB
需要做一個SVN更新。有兩種方法,現在這個可以去根據文件類型:
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
的提交方式,並讓他們再次嘗試。
您的文件是二進制文件還是ascii文件? – Stewart