1

在 SVN 1.6 中是否可以跟踪提交合并的位置。我对基于 UI 的解决方案特别感兴趣(Eclipse插件会很棒)。

4

3 回答 3

9

我曾经写过一个相当类似的网页。不幸的是,我不能给你页面,但我可以让你知道我做了什么。

首先是我们的开发模型——所有的开发都是针对主干的,然后修订被合并到不同版本的产品的不同发布分支中。

我设置了一个网页,每个版本都有一个列,每个主干修订版有一个行。通过为每一列运行 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

If you want to use an Eclipse plugin, you could try Subclipse. It is really easy to use and has been very useful to me in merging conflicted files and branching, merging branches etc... Here are some screenshots.

于 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 回答