16

我們已決定按照爲我們添加到我們的移動應用程序的每個新功能創建新的SVN分支的過程。這背後的最終目標是爲每個代碼更改保留歷史記錄(當我們手動將項目文件夾複製到SVN而不是創建&合併分支時,不會發生這種情況。Android Studio - 無法從SVN分支合併

我的問題是,到目前爲止我無法將更改從一個分支合併到另一個分支。

我已經提到了以下職位沒有成功:

這裏是我到目前爲止已經試過:

我有兩個特徵分支機構可在下列Tortoise SVN可以看出:

enter image description here

我想合併分支中的變化Feature_A3分支Feature_A2。要做到這一點,我使用從A2工作副本的Android Studio的VCS的Merge from選項:

enter image description here

然後,它要求我選擇分支從(A3)合併或配置其他分支:

enter image description here

我點擊配置分行,只是向您展示現有的分支配置:

enter image description here

正如你所看到的,A2是幹線和A3是這是正確的嗎?

然後它詢問我要將哪部分A3合併到A2中。我選擇/src目錄(其中相關的變化都存在):

enter image description here

然後,它慷慨地給了我三種不同的方式進行合併操作:

enter image description here

我選擇第三選項,因爲它直接給我我需要合併的更改:

enter image description here

我點擊合併選中BAM !!!每次我得到這個錯誤:

enter image description here

沒有線索,什麼是「未解決的衝突」或「跳過項目」是。爲什麼我得到這個錯誤,我應該怎麼做才能將A3中的更改合併到A2中?有人可以幫忙嗎?所有的答案將不勝感激。謝謝...

我有官方的IntelliJ IDEA以下文件已下:

請注意:

  • 目前我使用Subversion,Git的沒有。

  • 我本地工作副本的目錄結構並不完全是 與SVN回購的相同。這可能是錯誤的原因嗎?

答案...

感謝Peter Parker,並提出寶貴的意見特別是Yoav Aharoni。正如Yoav正確指出的那樣,確實是指定分支位置文件夾的方式。它需要是包含分支的文件夾,而不是分支文件夾本身:並且正如Peter所說的,選中「包含合併的修訂」會顯示合併的歷史記錄。我現在可以從IDE本身進行合併,並查看TortoiseSVN中的合併歷史記錄。 沒有命令行! YAY !!!

但是,最後一個問題是我無法查看Viewing Merge Sources中所述的Android Studio(Intellij IDEA)中的合併歷史記錄。有誰知道如何在Android Studio中實現這一點?

+2

你用cmd-line或TortoiseSVN嘗試過嗎?有錯誤消息可能更能說明問題,也許這個IDE缺少一些svn相關功能(這並不罕見)。 –

+0

是的,它似乎與Tortoise SVN一起工作,但雖然這些更改已合併,但源合併後的歷史記錄並未反映在合併後的目標分支中,這是以...開始的目標...如何合併改變並將源分支的歷史記錄反映在目標分支中? –

+1

您是否在TSVNs對話框中選中了「包含合併修訂」? –

回答

6

唷,沒有使用SVN在一段時間... :)

但是,從我記得Branch locations應該是包含你的分支文件夾(而不是每個單獨的分支文件夾)的文件夾

你看,通常一個SVN回購遵循標準的命名規則和文件夾結構:

trunk/ 
branches/ 
    Feature_A2/ 
    Feature_A3/ 
tags/ 
    v1.01/ 
    v1.02/ 

and so on... 

trunk是其中主要的發展發生,和branches是功能,長期或高風險項目,或針對不同的階段(如質量保證和預產品)。

所以,據我記得,Android Studio期望您將Branch locations設置爲branches文件夾。在你的情況下,我認爲它應該是http://192.168.0.64/svn/.../Android/Feature

此外,您的trunk不是Feature_A2 - Feature_A2只是另一個分支。
雖然我看不到內容,但我認爲http://192.168.0.64/svn/.../Android/Development可能是您的主幹。

這不應該打擾你很多,因爲你不必合併到你的樹幹,你也可以合併分支(例如,合併Feature_A3到Feature_A2)。

因此,回顧一下:

  1. 雖然不是強制性的,我建議重新命名文件夾,以匹配約定(你可以很容易地通過右擊做在烏龜SVN,但只有在所有隊友的提交,否則合併對他們來說會是一個HELL)。
  2. 嘗試設置Branch locationshttp://192.168.0.64/svn/.../Android/Feature
  3. Trunkhttp://192.168.0.64/svn/.../Android/Development(只有當它確實包含源碼,類似Feature_A2/3)
  4. 考慮在tags文件夾「標記」您的版本(這幾乎是僅僅複製幹線/分支文件夾到標籤,但你有一個命令)。

    如果你這樣做,你也可以添加tags文件夾到Branch locations,這樣你就可以比較你的當前源和任何以前的版本(這很方便)。

P.S:"unresolved conflicts" error也可能意味着你有未解決的衝突(死亡:))。當你和隊友在文件中改變相同的行(或者如果他刪除了你改變的文件)並且你更新以獲得他的改變時,通常會創建衝突。

SVN不會讓您合併,直到您手動解決這些衝突/更改。

您可以在底部的Version Control標籤中找到衝突,它們將標記爲紅色。
(但我不認爲這是你的情況的問題)


讓我知道,如果你是這樣的!

+1

非常感謝您的絕對正確答案!感謝你,我能夠從IDE而不是命令行進行合併,這正是我想要的。這確實是包含所有分支機構的文件夾...... :) –

2

我不是SVN專家,但我認爲你需要改變你的目錄結構。我相信即使它只是一個約定,svn使用目錄結構來合併分支。所以,你的目錄結構應該是:

SVN 
    /Android 
     /branches 
     /production 
     /featureA2 
     /featureA3 
     /tags 
     /trunk 
    /IOS 
     /branches 
     /production 
     /featureA2 
     /featureA3 
     /tags 
     /trunk 

即使TortoiseSVN的回購瀏覽器可以讓你移動你的目錄周圍,有很多的元數據存儲在每個目錄和用於處理合並進程,所以你可能不得不再次開始你的回購。請參閱subversion best practices guidestrategories for repository layout瞭解有關如何設置回購協議的更多詳細信息。儘管如此,我仍然不願意依靠Android Studio的svn集成來完成像合併分支那樣的繁重工作(儘管JetBrains工具中的大部分工作都非常棒),但是SVN的處理方式還有很多不足之處。

+1

這是不正確的。 SVN不依賴於特定的目錄結構。它從存儲在名爲「mergeinfo」的屬性中的元數據中獲得幫助,但是沒有這個合併工作也是如此。 –

+0

@KrisErickson:謝謝你花時間回答。我會進一步調查並回復你... :) –