SVN:跟踪合并

时间:2009-07-04 18:09:15

标签: svn version-control eclipse-plugin merge-tracking

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

3 个答案:

答案 0 :(得分:10)

我曾经写过一个非常网页的网页。不幸的是,我不能给你这个页面,但我可以告诉你我做了什么。

首先我们的开发模式 - 对主干进行的所有开发,然后将修订合并到不同版本的产品的各种发布分支中。

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

这让我们确切地看到每个版本包含的内容(对测试有用),以及突出显示是否有任何修订合并到一个地方而不是另一个地方。

答案 1 :(得分:2)

如果您想使用Eclipse插件,可以试试Subclipse。它非常易于使用,对我合并冲突的文件和分支,合并分支等非常有用...... 以下是一些screenshots

答案 2 :(得分: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:boa 03.07.2009
  [ - ] 7211:boa 03.07.2009
  [+] 7215:boa 03.07.2009

[+]表示合并修订,[ - ] - 未合并。