1

Subversion ブランチからコードをマージしているときに、理解できないものがあります。

一部の機能の修正を実装した「実験的」ブランチがあります。ブランチの作業を開始しました:

svn cp https://..../trunk https://.../branches/experimental

過去 2 週間、実験的なブランチのハッキングを進めましたが、トランクでは通常どおりの開発が行われました。ブランチでの作業は、特定の「ルート」フォルダー (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)他に2つあると報告されている代わりは:

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
$

...そうでもない。実際、単純に 2 つのバージョンのファイルを抽出すると、次のようになります。

$ 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

リストしたコマンドからわかるように、「experimental」はトランクから分岐されましたが、「experimental/usermgmnt-II」を再統合しようとしています。これが問題の原因である可能性があります。

于 2013-04-11T11:05:59.657 に答える