簡體   English   中英

svn mergeinfo屬性,如何查找,刪除或忽略

[英]svn mergeinfo property, how to find, remove, or ignore

我有一個帶有標准branchs / tags / trunk目錄結構的存儲庫。 行李箱包含一些svnexternals的東西(不確定是否對這個問題重要,以防萬一。

這是一個全新的項目,我們還沒有正式發布產品,因此這個問題的重要性不如幾個月之內大。

我正在嘗試將主干(開發)中的[修訂集]合並到我們的測試分支中。 現在,我收到了臭名昭著的合並信息錯誤。 有關更多信息,請參見此處 為了暫時解決此錯誤,我將刪除測試分支,然后重新創建它。 但是,這顯然不是一個好方法,特別是在我們開始進行越來越多的構建並將代碼移到我們的測試分支之后。

所以...我已經遍歷了測試分支級別的所有文件夾,以及更高級別的所有內容,並且沒有設置任何mergeinfo屬性。 實際上,我發現設置的唯一屬性是我的svnexternals,位於一個文件夾中。 在上面我輸入的鏈接中,另一個選項之一是設置ignoregencestry選項。 我的Tortoise版本已經默認,並且不起作用。

還有另一種方法來查找mergeinfo屬性,以便可以將其刪除嗎? 或者,還有另一種忽略mergeinfo屬性的方法,這樣我就可以完成這些合並,而不必浪費我的分支了?

編輯:順便說一下,我正在使用Tortoise版本1.8.4.24972(64位)

Edit2:我正在使用TortoiseSVN Gui Client進行所有操作(也就是我沒有從命令行執行任何操作)

Edit3:嗨,大衛,我不通過命令行執行任何操作。 這是我嘗試過的步驟以及錯誤:右鍵單擊“測試”分支,TortoiseSVN->合並...選擇“合並一系列修訂”。 要合並的URL:..... / trunk,“要合並的修訂范圍” =“所有修訂”。 忽略祖先是真的。 當我單擊“確定”時,錯誤提示:“錯誤,忽略mergeinfo時無法自動合並”

另外,“如何創建測試分支?”。 如果已經存在,請打開TortoiseSVN-> Repo瀏覽器。 導航到“分支”目錄。 在右側窗格中,右鍵單擊“測試”分支,選擇“刪除”,並給我評論“新手很難合並”。 接下來,返回到我的源代碼所在的Windows資源管理器。 右鍵單擊“ trunk”,選擇“分支/標簽...”。 選擇要創建分支/標記的位置,即../branches/test。 完成。

您如何創建該測試分支?

正確的方式

$ svn cp $REPO/trunk/proj $REPO/branches/branch_name/proj

錯誤的方法

$ svn mkdir $REPO/branches/branch_name/proj
$ svn co $REPO/branches/branch_name/proj      # This will be empty
$ svn export $REPO/trunk/proj                 # Copy in the files from prom
$ svn add -R .                                # Add the files back in
$ svn commit

為了進行合並,您需要三件事:

  • 您要合並的地方。
  • 您要合並的地方。
  • 兩者之間的最后一個共同祖先。

使用svn cp ,Subversion可以跟蹤原始分支(或主干)中文件的歷史記錄。 當您復制文件並使用svn add -R . ,Subversion認為這些文件與您從中復制文件的文件完全不同。

當您進行合並時,分支創建不正確時,Subversion將與大量本地文件/遠程添加錯誤發生大量沖突,因為Subversion會嘗試將文件添加到分支中,但已經看到了帶有相同的名字已經在那里。

這是否可能是您執行添加操作來創建分支而不是svn cp 您收到的確切錯誤消息是什么? 您正在使用哪個版本的Subversion客戶端? 您是從測試到主干還是從主干到測試合並,還是僅以一種方式合並? 您正在挑選修訂版嗎?


附錄:大衛,您好,我沒有通過命令行執行任何操作。

然后,查看該測試分支是如何創建的。 這可能有助於解決問題。 test分支選擇日志消息 在底部,取消選擇“ 復制/重命名時停止” 然后查看列表中最舊的修訂。 我的看起來像這樣:

Path                 Action    Copy from Path    Revision
-------------------  --------  ----------------  ---------
/branches/5.1/proj   Added     /trunk/proj       12344

請注意從路徑復制列。 這說明分支是通過等效於svn cp命令的主干復制而成的。 如果我關閉了“ 停止復制/重命名”功能 ,那么隨着歷史沿分支繼續下去,我還會看到更多日志。

我在TortoiseSVN中看到的主要問題之一是,創建分支很容易進行分支 ,然后將主干工作目錄中的文件拖到新分支中,然后從菜單中選擇TortoiseSVN-> Add

創建分支的正確方法是右鍵單擊主干項目上的存儲庫瀏覽器,然后從上下文菜單中選擇“ 復制到... ”。 這將向您顯示一個“ 復制到”對話框,然后鍵入分支的新URL。

如果查看Show log ,但看不到“ 從路徑復制”列,而是看到每個文件都有一個添加項,則說明該分支創建不正確。 這將導致您的合並出現問題。

該怎么辦? 您無能為力。 您可以忽略合並時的歷史記錄 ,這可能會有所幫助,但是svn:mergeinfo將無用,並且您必須手動跟蹤以前合並的內容。 另外,很有可能您仍然會遇到很多沖突。

為此,選擇普通的合並一系列修訂 ,然后在最后一個屏幕上,選擇忽略祖先

如果您使用TortoiseSVN副本而不是Windows副本並添加來創建分支,則可能存在另一個問題。 我需要查看您得到的確切錯誤。 有幾個問題將導致合並沖突。 例如,某人在分支上所做的更改與對Trunk所做的相同。 想象一下,有人在樹枝上發現了一個問題,將其修復,然后以為我不妨在樹干上修復它 在這種情況下,由於添加或刪除了相同的文件,或者在同一文件中更改了相同的行,您將發生沖突。 這些類型的更改可以輕松解決,但是很痛苦。

為了避免出現這些錯誤,開發人員應該將分支和主干之間的更改合並 (或者反之亦然),而不是在分支和主干上都進行更改。

這有幫助嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM