Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SVN:轨迹合并_Svn_Version Control_Eclipse Plugin_Merge Tracking - Fatal编程技术网

SVN:轨迹合并

SVN:轨迹合并,svn,version-control,eclipse-plugin,merge-tracking,Svn,Version Control,Eclipse Plugin,Merge Tracking,在SVN1.6中是否可以跟踪合并提交的位置。我对基于UI的解决方案特别感兴趣(插件会很棒)。我曾经写过一个相当不错的网页,就是这样做的。不幸的是,我不能给你这一页,但我可以告诉你我做了什么 首先是我们的开发模型——所有对主干进行的开发、修订,然后合并到不同版本产品的各个发布分支中 我设置了一个网页,每个版本有一列,每个主干版本有一行。 通过对每一列运行svnmergeinfo,我得到了已合并到该版本的主干修订列表 因此,我们最终得到了一个非常类似于您得到的那些功能比较列表的东西——一个表,显示了

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

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

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

我设置了一个网页,每个版本有一列,每个主干版本有一行。 通过对每一列运行svnmergeinfo,我得到了已合并到该版本的主干修订列表

因此,我们最终得到了一个非常类似于您得到的那些功能比较列表的东西——一个表,显示了包含相应主干提交的每个版本的一个黑点

看起来有点像这样:

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    |

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

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

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

我设置了一个网页,每个版本有一列,每个主干版本有一行。 通过对每一列运行svnmergeinfo,我得到了已合并到该版本的主干修订列表

因此,我们最终得到了一个非常类似于您得到的那些功能比较列表的东西——一个表,显示了包含相应主干提交的每个版本的一个黑点

看起来有点像这样:

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    |

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

感谢所有回答的人(特别感谢和)。我使用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);
}
private static void showMergedRevision(字符串pFromUrl,字符串pToUrl)抛出SVNException{
列表文件夹=新建ArrayList();
文件夹。添加(“文件夹1”);
...
SVNRepositoryFactoryImpl.setup();
String name=“user”;
字符串password=“password”;
isvnpoptions=SVNWCUtil.createDefaultOptions(true);
ISVNAuthenticationManager authManager=SVNWCUtil.createDefaultAuthenticationManager(名称、密码);
SVNClientManager-ourClientManager=SVNClientManager.newInstance(选项,authManager);
final Set mergedRevision=新HashSet();
用于(字符串文件夹:文件夹){
SVNURL svnFrom=SVNURL.parseURIDecoded(pFromUrl+“/”+文件夹);
SVNURL svnTo=SVNURL.parseURIDecoded(pToUrl+“/”+文件夹);
ISVNLogEntryHandler mergedLogger=新的ISVNLogEntryHandler(){
公共无效handleLogEntry(SVNLogEntry pParamSVNLogEntry)引发SVNException{
mergedRevision.add(pParamSVNLogEntry.getRevision());
}
};
ourClientManager.getDiffClient().doGetLogMergedMergeInfo(svnTo,SVNRevision.HEAD,svnFrom,SVNRevision.HEAD,false,null,mergedLogger);
}
System.out.println(String.format(“跟踪从[%s]到[%s]的合并”,pFromUrl,pToUrl));
System.out.println(“比较文件夹:+文件夹”);
SVNURL svnurlog=SVNURL.parseURIDecoded(pFromUrl);
ISVNLogEntryHandler histroyLogger=新的ISVNLogEntryHandler(){
公共无效handleLogEntry(SVNLogEntry pParamSVNLogEntry)引发SVNException{
if(pParamSVNLogEntry.getRevision()<0){
//有时会得到-1个空值。跳过它们
返回;
}
最终布尔值merged=mergedRevision.contains(pParamSVNLogEntry.getRevision());
System.out.println(字符串.格式(“%s%s:%s%s%s”,合并?”[+]:“[-]”,
pParamSVNLogEntry.getRevision(),
pParamSVNLogEntry.getAuthor(),pParamSVNLogEntry.getDate(),
pParamSVNLogEntry.getMessage());
}
}; 
ourClientManager.getLogClient().doLog(svnURL,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


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

感谢所有回答者(特别感谢和)。我使用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);
}
private static void showMergedRevision(字符串pFromUrl,字符串pToUrl)抛出SVNException{
列表文件夹=新建ArrayList();
文件夹。添加(“文件夹1”);
...
SVNRepositoryFactoryImpl.setup();
String name=“user”;
字符串password=“password”;
isvnpoptions=SVNWCUtil.createDefaultOptions(true);
ISVNAuthenticationManager authManager=SVNWCUtil.createDefaultAuthenticationManager(名称、密码);
SVNClientManager-ourClientManager=SVNClientManager.newInstance(选项,authManager);
final Set mergedRevision=新HashSet();
用于(字符串文件夹:文件夹){
SVNURL svnFrom=SVNURL.parseURIDecoded(pFromUrl+“/”+文件夹);
SVNURL svnTo=SVNURL.parseURIDecoded(pToUrl+“/”+文件夹);
ISVNLogEntryHandler mergedLogger=新的ISVNLogEntryHandler(){
公共无效handleLogEntry(SVNLogEntry pParamSVNLogEntry)引发SVNException{
mergedRevision.add(pParamSVNLogEntry.getRevision());
}
};
ourClientManager.getDiffClient().doGetLogMergedMergeInfo(svnTo,SVNRevision.HEAD,svnFrom,SVNRevision.HEAD,false,null,mergedLogger);
}
System.out.println(String.format(“跟踪从[%s]到[%s]的合并”,pFromUrl,pToUrl));
System.out.println(“比较文件夹