1

SVN 1.6 でコミットがマージされた場所を追跡することは可能ですか? 私は特に UI ベースのソリューションに興味があります ( Eclipseプラグインは素晴らしいでしょう)。

4

3 に答える 3

9

私はかつて、これを行うようなかなりのWebページを書きました。残念ながら、そのページをお見せすることはできませんが、私が何をしたかをお伝えすることはできます。

最初の開発モデル - すべての開発はトランクに行われ、リビジョンは製品のさまざまなバージョンのさまざまなリリース ブランチにマージされます。

各バージョンの列と各トランク リビジョンの行を含む Web ページをセットアップしました。各列に対して svn mergeinfo を実行すると、そのバージョンにマージされたトランク リビジョンのリストが返されました。

そのため、得られる機能比較リストと非常によく似たものになりました。これは、対応するトランク コミットを含む各バージョンの黒い点を示す表です。

このように少し見えました:

rev   |  ver1  |  ver1.1  |  ver2  | ver2.1  |
200   |        |          |        |    X    |
198   |        |    X     |        |    X    |
177   |        |          |        |    X    |
176   |        |          |   X    |    X    |
157   |   X    |    X     |   X    |    X    |
146   |   X    |    X     |   X    |    X    |
122   |   X    |    X     |   X    |    X    |
075   |   X    |    X     |   X    |    X    |

これにより、各バージョンに何が含まれているかを正確に確認でき (テストに役立ちます)、リビジョンがある場所にマージされ、別の場所にはマージされていないかどうかを強調表示できます。

于 2009-07-04T20:00:36.970 に答える
2

Eclipse プラグインを使用する場合は、 Subclipseを試すことができます。これは非常に使いやすく、競合するファイルのマージや分岐、分岐のマージなどに非常に役立ちました。いくつかのスクリーンショットを次に示します。

于 2009-07-06T07:46:13.310 に答える
1

回答してくれたすべての人に感謝します ( derobertJim Tに特に感謝します)。svnkit 1.2.x を使用して、まさに必要なことを行う独自のコードを作成します。

private static void showMergedRevision(String pFromUrl, String pToUrl) throws SVNException {
    List<String> folders= new ArrayList<String>();
    folders.add("Folder1");
    ...

    SVNRepositoryFactoryImpl.setup();

     String name="user";
     String password="password";

     ISVNOptions options = SVNWCUtil.createDefaultOptions( true );

     ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(name, password);

     SVNClientManager ourClientManager = SVNClientManager.newInstance( options , authManager );

     final Set<Long> mergedRevision = new HashSet<Long>();        
     for(String folder : folders){
         SVNURL svnFrom = SVNURL.parseURIDecoded(pFromUrl + "/" + folder);
         SVNURL svnTo = SVNURL.parseURIDecoded(pToUrl+ "/" + folder);
         ISVNLogEntryHandler mergedLogger = new ISVNLogEntryHandler() {
            public void handleLogEntry(SVNLogEntry pParamSVNLogEntry) throws SVNException {
                mergedRevision.add(pParamSVNLogEntry.getRevision());
            }
        };
        ourClientManager.getDiffClient().doGetLogMergedMergeInfo(svnTo, SVNRevision.HEAD, svnFrom, SVNRevision.HEAD, false, null, mergedLogger);
     }

     System.out.println(String.format("Tracking merges from [%s] to [%s].", pFromUrl, pToUrl));
     System.out.println("Comparing folders: " + folders);

     SVNURL svnUrlorg = SVNURL.parseURIDecoded(pFromUrl);
     ISVNLogEntryHandler histroyLogger= new ISVNLogEntryHandler() {
        public void handleLogEntry(SVNLogEntry pParamSVNLogEntry) throws SVNException {
            if (pParamSVNLogEntry.getRevision() < 0){
                // Sometimes got -1 null null null values. Skip them
                return;
            }
            final boolean merged = mergedRevision.contains(pParamSVNLogEntry.getRevision());
            System.out.println(String.format("%s %s: %s %s %s", merged ? "[+]": "[-]", 
                    pParamSVNLogEntry.getRevision(), 
                    pParamSVNLogEntry.getAuthor(), pParamSVNLogEntry.getDate(), 
                    pParamSVNLogEntry.getMessage()));
        }
    }; 
    ourClientManager.getLogClient().doLog(svnUrlorg, null, SVNRevision.HEAD, SVNRevision.create(0), SVNRevision.HEAD, true, false, false, -1, null, histroyLogger);
}

出力は次のようになります。

[-] 7210: ボア 03.07.2009
[-] 7211: ボア 03.07.2009
[+] 7215: ボア 03.07.2009

[+] はマージされたリビジョン、[-] - マージされていないことを意味します。

于 2009-07-05T20:40:55.957 に答える