代码之家  ›  专栏  ›  技术社区  ›  FoxyBOA

SVN:跟踪合并

  •  1
  • FoxyBOA  · 技术社区  · 16 年前

    是否可以在SVN1.6中跟踪提交的合并位置?我对基于用户界面的解决方案特别感兴趣( Eclipse 插件将是伟大的)。

    3 回复  |  直到 15 年前
        1
  •  10
  •   Jim T    16 年前

    我曾经写过一个相当不错的网页,就是这样做的。不幸的是,我不能给你这一页,但我可以告诉你我做了什么。

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

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

    这让我们能够准确地看到每个版本包含什么(对于测试很有用),并突出显示是否有任何修订被合并到一个地方而不是另一个地方。

        2
  •  2
  •   moxn    16 年前

    如果您想使用Eclipse插件,可以尝试 Subclipse .它非常容易使用,在合并冲突文件和分支、合并分支等方面对我非常有用。 这里有一些 screenshots .

        3
  •  1
  •   Community Mohan Dere    8 年前

    感谢所有被回答的人(特别感谢 derobert Jim 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 2009年7月3日
    [-]7211:BOA 2009年7月3日
    [+]7215:BOA 2009年7月3日

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

    推荐文章