1

在合并来自 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

因此,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 行。因此,就实验分支中该文件的版本而言,“合并”过程应该是“无操作” - “实验分支中的此文件中没有提交任何内容,保持不变”。

提前感谢您的任何帮助/建议。

PS 如果它很重要,我们使用的是 Subversion 1.6 - 更具体地说:服务器上的版本 1.6.11,在我的客户端机器上,我使用命令行界面,版本 1.6.17。使用最新的 TortoiseSVN 时也会出现问题行为(所以我倾向于怀疑这是特定于版本的)。

4

1 回答 1

0

正如我从您列出的命令中看到的那样,“实验”是从主干分支出来的,但您尝试重新集成“实验/usermgmnt-II”。这可能是问题的根源。

于 2013-04-11T11:05:59.657 回答