在从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
$
...我们执行merge命令:
$ 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
因此,subversion报告称'工作'版本 - 即我们工作文件夹中的版本(我们在上面看到,它反映了“主干”)据报道有这条线......
public Pair<List<Map<String, String>>, String> allSubsInfo();
...在其中,而实验分支中的版本(如果我正确地解密合并冲突消息)通过subversion报告(a)没有“allSubsInfo”行,并且(b)但是还有两个人:
public Pair<List<Map<String, String>>, String> allGaiaSubsInfo();
public Pair<List<Map<String, String>>, String> subsUsersInfo(int subs_id);
然而,情况并非如此 - 为了证明这一点,我们使用“svn cat”打印实验分支中文件的内容,并使用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”或“allGaiaSubsInfo”的实例。实际上,输出文件是通过“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时也会出现问题行为(所以我倾向于怀疑这是特定于版本的)。
答案 0 :(得分:0)
正如我从你列出的命令中看到的那样,“实验”是从主干分支出来的,但你试图重新整合“experimental / usermgmnt-II”。这可能是问题的根源。