发表于: 2005.06.30 13:32
分类: 朝花夕拾
出处: http://strawberry79.itpub.net/post/329/33909
---------------------------------------------------------------
多人协作使用版本库时出现的问题:
问题一:
Q:sandy和may同时下载了档本库中的某一个程序mytest1,sandy修改了该文件,并进行了commit,而may此刻不知道服务器上的版本已经进行了更新,自已本地的版本已经旧了,于是她也对这个文件修改了,当她要提交时,SVN就报错了,告诉她提交时,合并冲突,不能提交?
A:如果这种问题出现了,update一下本地的版本,这时如果你改的部分和刚提交时改动的部分不是同样的内容,那么SubVersion会把刚才sandy修改的内容合并到你的程序中,这时你就可以提交了.这种情况还是要避免的,在改动之前还是先update一下,省了麻烦.
问题二:
Q:开锁和解锁的问题,sandy把mytest1这个文件lock了,这时may就不能再提交了,当sandy进行过commit之后,may就可以commit了,sandy并没有进行unlock的操作,但subversion已经在sandy commit之后,把锁给打开了.
问题三:sandy和may修改了同一件文件的同一个地方,现在sandy先commit,当may commit时,subversion提示
Your file or directory 'mytest1.java' is probably out-of-date
The version resource does not correspond to the resource within the transaction. Either the requested version resource is out of date (needs to be updated), or the requested version resource is newer than the transaction root (restart the commit).
如何办?
A:这时你要update一下这个文件,和刚才的情况不同,现在subversion可不知道你俩都改了同一个地方,该舍谁保谁了,这项工作只能有你来做了,对于subversion来说,它会保留你写的那个文件,然后再生成一个文件,如下
<<<<<<< .mine
public void function3(){
=======
public void function2(){
>>>>>>> .r17
他将你的修改和刚才sandy提交的修改,都列了出来,并在文件夹中增加了三个文件
filename.mine
這是你在更新工作複本前, 就在工作複本中的檔案—也就是說, 它沒有衝突標記. 這個檔案就只有你的最新更動, 沒有包含其它的東西.
filename.r舊版號
這是在你更新工作複本前, BASE 修訂版的檔案. 也就是在你開始進行修改之前所取出的檔案.
filename.r新版號
這是 Subversion 用戶端在你更新工作複本時, 剛從伺服器取得的檔案. 這個檔案對應的是檔案庫中的 HEAD 修訂版的檔案.
如果这三个文件还在,那么你暂时是无法进行commit的.
如果你遇到了这类似的衝突, 你必須進行以下三項之一:
“手動” 合併發生衝突的文字 (藉由檢視與編輯檔案裡的衝突標記).
將某一個臨時檔案複製並蓋過你的工作檔.
執行 svn revert <filename>, 將你的本地更動全部捨棄.
當你解決了衝突之後(保留了自已的修改), 你必須執行 svn resolved, 讓 Subversion 知道你已经解决了问题. 它會刪除這三個臨時檔案, Subversion 就不會認為這個檔案還是處於衝突的狀態的了,由此commit该文件就可以了.