【问题标题】:SVN: Track mergesSVN:轨道合并
【发布时间】:2009-07-04 18:09:14
【问题描述】:

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

【问题讨论】:

  • 你必须更具体一点,因为“合并提交”的概念在 subversion 中不能 100% 起作用。
  • 我有一个提交,必须合并到几个分支中。后来我想知道提交被合并在哪些分支(在哪里和谁)。它以相反的方式工作(合并提交显示它的来源)。
  • 与SVN合并和管理合并的困难是我们切换到P4的原因。我认为你最好的选择可能是在 repo 中搜索更改的行,然后查看它出现在哪些分支中。
  • 我发现在 SVN 中跟踪合并的最佳方法是使用非常具有描述性的提交消息。

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


【解决方案1】:

我曾经写过一个相当类似的网页。很遗憾,我不能给你页面,但我可以告诉你我做了什么。

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

我设置了一个网页,其中每个版本都有一个列,每个主干修订版有一个行。 通过为每一列运行 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 非常好的主意。 svn mergeinfotable -r 200:75 --source repo/branches 的功能请求,有人吗?
  • +1 我刚刚为我们的团队构建了类似的东西,事实证明它非常有用。感谢您分享这个想法。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    感谢所有回答的人(特别感谢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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多