如何在svn日志中搜索

时间:2010-06-17 13:55:54

标签: svn tortoisesvn merge

我希望能够在svn的提交日志中进行搜索。我知道你可以在乌龟身上做到这一点,但是找不到使用命令行的方法。

我们正在采用双层存储库方法,因此稳定分支只能完成故事并进行测试。为了实现这一点,我们需要一种方法在提交消息中搜索故事代码(例如:#s1322)并获取要在后续合并命令中使用的修订列表。

Ex:searchsvnapp http://[repo location root]#s1322

结果:4233,4249,4313

5 个答案:

答案 0 :(得分:8)

对于Subversion 1.8自然方式(tm)是使用新选项--search + --search-and来过滤日志

svn log --search #s1322 URL

而且,顺便说一下,每个故事都可以分成自己的分支 - 在这种情况下,根本不需要检测修订范围,你只需合并分支

答案 1 :(得分:6)

这不会起作用吗?

svn log | grep "something"

答案 2 :(得分:3)

Windows版本的the_void的回答:

svn log | find "something"

答案 3 :(得分:1)

首先,确保你有与你的Tortoise'Subversion'版本相匹配的Subversion命令行(collabnet是我使用的发行版)。在Tortoise中查看框以查找Subversion修订版。每个subversion工具都有自己的Subversion客户端副本,并且它们并不总是可以互换的。主要版本将破坏兼容性。

从命令行:

  

svn log> svn.out

然后在你喜欢的编辑器中弹出它!

答案 4 :(得分:1)

我最终使用svnkit开发了自己的工具。

下面是搜索日志的代码的主要部分。我不得不使用临时文件夹使用“SVNWCUtil.createDefaultAuthenticationManager”,这样就不会弄乱我应该运行该工具的同一个框中的cmd line svn工具的svn配置。如果有足够的兴趣,我可以制作整个webtool opensource。如果您有兴趣,请告诉我(对答案投票可能?)

public Collection<SVNLogEntry> searchSVN(String url, String name,
        String password, long startRevision, long endRevision,
        String searchTerm, String svnUser) throws Exception {
    DAVRepositoryFactory.setup();
    SVNRepository repository = null;
    repository = SVNRepositoryFactory.create(SVNURL.parseURIEncoded(url));
    // changed the config folder to avoid conflicting with anthill svn use
    ISVNAuthenticationManager authManager = SVNWCUtil
            .createDefaultAuthenticationManager(new File("/tmp"), name,
                    password, false);
    repository.setAuthenticationManager(authManager);
    Collection<SVNLogEntry> resultLogEntries = new LinkedList();
    Collection<SVNLogEntry> logEntries = repository.log(
            new String[] { "" }, null, startRevision, endRevision, true,
            true);
    for (SVNLogEntry svnLogEntry : logEntries) {
        if (svnLogEntry.getMessage().indexOf(searchTerm) > -1) {
            if ((svnUser == null || svnUser.equals(""))
                    || svnLogEntry.getAuthor().equals(svnUser)) {
                resultLogEntries.add(svnLogEntry);
            }
        }
    }
    return resultLogEntries;
}