2010-09-18 65 views
3

這篇文章可能有點長,但如果你認爲你可以提供幫助,請閱讀它,因爲它在字面意義上是一個救生員。svnmerge真的有幫助我嗎?

這裏是場景。我正在開發一個[KDE]項目,其主幹位於,可以這樣說:http://ubersvn.org/home/uber/trunk/myapp。另外,我正在分支上工作,可以說:http://ubersvn.org/home/uber/branches/work/myapp-mod。這就是我一直在做的:

創建分支後,我一直在分支的本地工作副本上工作,而且我經常用來從主幹中提取更改。有人告訴我,這將有助於防止最終合併回幹線時發生衝突。所以,我經常這樣做:

svnmerge.py merge 
svn commit -F svnmerge-commit-message.txt 

工作完成後,是時候把分支合併回幹線了。我先檢查了後備箱的工作副本:

svn co svn+ssh://ubersvn.org/home/uber/trunk/myapp 
cd myapp 

於是,我跟着documentation用於合併回:

svnmerge init svn+ssh://ubersvn.org/home/uber/branches/work/myapp-mod 

和融合來回:

svnmerge merge --bidirectional -S svn+ssh://ubersvn.org/home/uber/branches/work/myapp-mod 

而且這是問題開始的地方。 首先,從它的外觀來看,它正在合併每一個版本,因爲我分支。如果是這樣的話,我看不到我經常從後備箱中拔出並保持分支更新的重點。但是,我只是假設svnmerge以某種方式使用它來解決整個合併中的衝突。到現在爲止還挺好。

Attempt to add tree conflict that already exists 

一點點在網上搜索,告訴我,這個問題可以通過以下方式解決:

svn resolve --accept working -R . 

然後

其次,它聽起來東西這樣的錯誤突然結束它表明一些決議已被清除,所有。但是,現在當我這樣做:

svnmerge merge --bidirectional -S [BRANCH_URL] 

它說, '沒有發現SVNMERGE信息'。我嘗試使用svnmerge init BRANCH_URL,但它說'.' has local modifications. It must be clean

所以,我現在面臨的問題是:

  • 我無法從我的分支拉,因爲有本地修改
  • 爲了讓我的工作拷貝乾淨,我必須承諾,這是不是一種選擇因爲合併只有一半,它肯定會破壞主幹。
  • 我的文件完全不一致。我不知道修訂版本是如何合併的,有些文件包含'mylittleapp.h',但'mylittleapp.h'是在稍後的版本中創建的。
  • **對於每個**新文件,我的分支中都添加了大量衝突**。我**絕對**不理解這一點。我是唯一一個開發這些文件的開發人員,這些文件在任何時間都無法在主幹中使用。爲什麼這些文件中有太多衝突?
  • 有大量文件叫做`mybigapp.h.merge-(right | left).r [0-9] +`和`mybigapp.h.working`。 `mybigapp.h`本身就是完整的衝突。如此多的衝突是人類不可能解決的。
  • 由於一半的文件假設存在一個實際上不存在的文件,我無法測試或做任何事情,直到我得到該文件。我試圖添加樹衝突錯誤後,我不能得到任何以後的修訂。

那麼,我該如何從這裏開始?一種解決方案似乎只是從分支中區分,應用於中繼,然後提交。但根據我工作的組織的政策,這是不可接受的。任何幫助非常感謝,我會很感激。

感謝, 羅漢

+0

您正在使用什麼版本的顛覆? 版本> = 1.5提供「內置」合併跟蹤。根據我的理解* svnmerge *已過時。 – zellus 2010-09-18 13:03:46

回答

2

我真的沒有你的解決方案,但我希望這有助於。

在將分支合併回主幹之前,您的分支需要有每創建一個分支時,從主幹提交。這很重要,因爲否則將您的更改合併回主幹會清除主幹上的其他人的更改。

rev 5: created my-branch 
rev 6: change 1 in my-branch 
rev 7: change somefile.h in trunk 
rev 8: change 2 in my-branch 

現在,如果你只是將我的分支合併回主幹,從第7版的變化將會丟失!這就是爲什麼你需要更新你的分支與所有變化的主幹。無論何時合併更改,SVN都會將mergeinfo屬性(SVN 1.5)添加到頂級目錄(您正在進行合併的目錄)。這看起來是這樣的:

的svn:合併信息/主幹:7,10-13,14(這意味着你已經合併從樹幹這些修訂的分支)

約樹衝突的消息通常是相關到文件和目錄的移動和重命名。如果你刪除了一個文件但沒有使用svn delete,或者somefile.h在trunk中被改變了,但是這個文件被移到了你的分支的其他地方。

這裏是我想嘗試:

  1. 結帳新幹線
  2. 結帳新的分支
  3. 確保分支包含從主幹每一次變化(你可以在頂級的分支目錄查詢mergeinfo屬性如果你正在使用SVN 1.5)
  4. 閱讀有關合並http://svnbook.red-bean.com/en/1.5/index.html一切(它不會把你太久,你就會知道你在做什麼)
  5. 嘗試合併你r分支回主幹

由於我沒有使用命令行客戶端,因此我無法幫助您使用命令行。你想要做的是每天都在使用SVN的人,它必須工作。