我看到一些我不明白的東西,當從一個Subversion分支合併代碼時。顛覆合併失敗
我們有一個「實驗」分支,我們在那裏實施了一些功能的修復。我們開始與分支工作:
svn cp https://..../trunk https://.../branches/experimental
我們繼續破解的實驗分行在過去的兩個星期,而正常的發展繼續像往常一樣在樹幹上。在分支上工作只發生在特定的「根」文件夾(usermngmt-II)上。
現在是合併分支工作回幹線的時候了。合併過程中出現的問題可以描述爲:「在實驗分支中從未改變過的文件,無法在幹線中乾淨地合併」。
從鏡像文件夾的樹幹版的工作文件夾開始......
$ cd workOnTrunk
$ svn info
Path: .
URL: https://x.x.x.x/.../trunk/usermgmnt-II
...
$ svn update
At revision 4900.
$ svn status
$
......我們執行合併命令:
$ svn merge --reintegrate ^/branches/experimental/usermgmnt-II/
Conflict discovered in 'webservices/usermngmt-ws-api/src/java/gr.neuropublic.gaia.usermngmt.ws.api/IUserMngmtService.java'.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options: df
--- /tmp/svn-9vbG0j Πεμ Απρ 11 11:27:54 2013
+++ webservices/usermngmt-ws-api/src/java/gr.neuropublic.gaia.usermngmt.ws.api/.svn/tmp/IUserMngmtService.java.8.tmp Πεμ Απρ 11 11:27:54 2013
@@ -49,7 +49,16 @@
public Pair<Integer, String> numOfUsers();
+<<<<<<< .working
+ public Pair<List<Map<String, String>>, String> allSubsInfo();
+=======
+>>>>>>> .merge-right.r4900
+ public Pair<List<Map<String, String>>, String> allGaiaSubsInfo();
+
+ public Pair<List<Map<String, String>>, String> subsUsersInfo(int subs_id);
+
+
@Local
所以顛覆報道說,「工作'版本 - 也就是說,我們工作文件夾中的版本(正如我們上面所看到的,鏡像「主幹」)據報道具有該行...
public Pair<List<Map<String, String>>, String> allSubsInfo();
...裏面,而實驗分支中的版本(如果我正確解譯合併衝突消息)通過顛覆報告(a)沒有「allSubsInfo」行,(b)但有兩個人來代替:
public Pair<List<Map<String, String>>, String> allGaiaSubsInfo();
public Pair<List<Map<String, String>>, String> subsUsersInfo(int subs_id);
然而,這種情況並非如此 - 來證明這一點,我們使用「SVN貓」打印實驗分支中的文件的內容,和grep爲報道的方法:
$ svn cat ^/branches/experimental/usermgmnt-II/webservices/usermngmt-ws-api/src/java/gr.neuropublic.gaia.usermngmt.ws.api/IUserMngmtService.java | grep 'all.*SubsInfo'
$
很明顯,在「實驗」分支中的「衝突」文件沒有「allSubsInfo」或「allGa」的實例iaSubsInfo」。實際上,通過「svn merge」命令生成的輸出文件...
$ grep allSubsInfo IUserMngmtService.java.merge-right.r4900
$
...也沒有。事實上,如果我們只是普通的解壓縮文件的兩個版本:
$ svn cat -r4900 ^/branches/experimental/usermgmnt-II/webservices/usermngmt-ws-api/src/java/gr.neuropublic.gaia.usermngmt.ws.api/IUserMngmtService.java > /var/tmp/experimental.java
$ svn cat ^/trunk/usermgmnt-II/webservices/usermngmt-ws-api/src/java/gr.neuropublic.gaia.usermngmt.ws.api/IUserMngmtService.java > /var/tmp/trunk.java
$ diff -u /var/tmp/experimental.java /var/tmp/trunk.java
--- /var/tmp/experimental.java 2013-04-11 11:49:13.000000000 +0300
+++ /var/tmp/trunk.java 2013-04-11 11:49:58.000000000 +0300
@@ -49,6 +49,13 @@
public Pair<Integer, String> numOfUsers();
+ public Pair<List<Map<String, String>>, String> allSubsInfo();
+
+ public Pair<List<Map<String, String>>, String> allGaiaSubsInfo();
+
+ public Pair<List<Map<String, String>>, String> subsUsersInfo(int subs_id);
+
+
@Local
public interface ILocal extends IUserMngmtService {}
......我們看到,在樹幹上的版本只是簡單地添加3條線。因此,就這個文件在實驗分支中的版本而言,「合併」過程應該是「無操作」 - 「實驗分支中沒有任何文件被提交,保持不變」。
在此先感謝您的任何幫助/建議。
P.S.如果它很重要,我們使用Subversion 1.6 - 更具體地說:服務器版本爲1.6.11,在我的客戶機上使用1.6.17版本的命令行界面。當使用最新的TortoiseSVN時也會出現問題行爲(所以我傾向於懷疑這是特定版本)。
在重新整合之前,您是否已將樹幹更改合併到您的分支? – maxim1000 2013-04-11 10:29:23
@ maxim1000:嘗試將trunk版本的「usermgmnt-II」合併到實驗分支(沒有--reintegrate),顯示完全相同的衝突:https://gist.github.com/anonymous/5362364 – ttsiodras 2013-04-11 10:34:38
合併'trunk'進入'實驗性',拿着'trunk'版本的衝突文件,然後將'實驗性'合併回主幹? – 2013-04-12 11:35:19