2013-03-28 127 views
5

我們正在合併從主幹到分支的更改。當我們這樣做時,合併信息被記錄下來。僅提交svn合併信息

由於分支中可能存在其他更改,是否存在一種安全的方式來只提交受合併影響的文件(假設沒有其他更改)以及合併屬性/信息?

「假設我想從樹幹合併修訂版本'r1'到分支,我從樹幹到分支爲'r1'合併現在爲'r1',在分支文件夾中記錄合併信息。如果我在分支中執行svn diff,它會顯示'。'已經修改,並且顯示'r1'是合併屬性的一部分,現在我如何提交由於'r1'被合併而僅被合併的文件以及合併屬性,其中指示'r1'。「

+0

你對「其他變化」有什麼含義?工作副本中的更改不屬於該分支? – 2013-03-28 08:41:31

+0

@TobiasZander Yea。分支中其他文件的更改與合併無關。問題是,如果我正確理解你的問題,我們可以單獨提交這些文件,但一直未能僅提交合並屬性/信息 – 2013-03-28 09:16:07

+0

我不確定。如果您只想提交合並信息,只需在提交時取消選擇所有其他文件。如果您只想合併特定的修訂版本,則還可以在進行選擇時僅選擇這些修訂版本。你使用什麼樣的svn客戶端? – 2013-03-28 09:27:03

回答

1

如果您正在使用像TortoiseSVN這樣的SVN客戶端,在正常合併中,mergeinfo將自動更新爲根文件夾的文件夾屬性,並且會在文件提交列表中列出具有屬性更改的文件夾。

如果沒有自動來找你的承諾,那麼你甚至可以連手動以下步驟,如果您使用TortoiseSVN的客戶端(與假設root作爲家長,mytask作爲當前的任務分支,subtask作爲一個已經合併做到這一點從當前分支回分支programs在每個BRACH代碼文件夾):

  1. 鼠標右鍵點擊你workign分支mytask的副本programs文件夾,選擇該選項TortoiseSVN-->Properties
  2. 在新的窗口,如果你已經有了以前mergeinfo記錄,然後將列表中的屬性與svn:mergeinfo類似下面的值值:

    根/節目:1-489

    根/任務/ mytask /任務/子任務/項目:380-410

    然後,你可以做以下步驟:

    a)通過選擇svn:mergeinfo項目在窗口中選擇編輯 - >高級選項,並更新要提交的合併信息,點擊'確定'。

  3. 在新窗口中,如果你沒有任何以前mergeinfo做,那麼你可以去以下步驟:

    a)選擇選項New-->Advanced

    b)從下拉列表中選擇svn:mergeinfo,在值文本框中添加相應的mergeinfo並保存。

  4. 通過單擊programs文件夾來執行SVN提交,它將在文件中列出programs文件夾以提交屬性更改並且您可以提交它。

在otherhand

如果你想從家長到工作副本的合併過程中,僅提交了合併後的文件,並保持局部改善的其他文件提交的,那麼,有沒有直接的方法爲了達成這個。間接方式是保持兩個單獨的工作拷貝(讓我們說COPY1和COPY2)你的任務分支(mytask),並執行以下步驟:

  1. copy1是有所有的本地更改,你可以保持的是,除了一段時間
  2. SVN簽出您的分支的新工作副本copy2
  3. 將您父母的更改合併到copy2並提交。這可以確保您只提交所需的所有mergeinfo合併的更改到服務器。
  4. 然後去你的copy1,做一個SVN更新,它會得到從服務器到這個工作副本的新合併更改。 (如果在合併期間更新了一些文件,並且在本地更改期間您也更改了這些文件,則在此SVN更新期間它將發生衝突)。解決衝突,然後您可以繼續進行本地更改。
1

這是一個老話題,但是,因爲我也需要類似的東西,並沒有找到任何計算器,這是我的看法:使用「SVN提交--depth =空folder_with_mergeinfo merged_files」。

在我的情況下,我合併了兩個分支,如果我嘗試'svn ci分支',它會嘗試提交在該分支下修改的所有東西。使用--depth = empty可確保只有文件夾合併信息和您想要提交的文件。

+0

這似乎沒有提交更改的文件。 – trysis 2017-06-07 13:54:55

+0

它應該,如果你像我的評論說的那樣將它們添加到svn命令行中。當然,如果你沒有改變太多的文件,這是唯一可行的。 – fencekicker 2017-06-08 14:44:30

+0

對不起,我認爲這行太長了,'folder_with_mergeinfo'和'merged_files'之間沒有空格。 – trysis 2017-06-08 18:22:08