【问题标题】:How do I search within svn logs如何在 svn 日志中搜索
【发布时间】:2010-06-17 13:55:53
【问题描述】:

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

我们正在转向两层存储库方法,因此稳定分支只会让故事完全完成和测试。为此,我们需要一种在提交消息中搜索故事代码(例如:#s1322)的方法,并获取要在后续合并命令中使用的修订列表。

例如:searchsvnapp http://[repo location root] #s1322

结果:4233,4249,4313

【问题讨论】:

    标签: svn tortoisesvn merge


    【解决方案1】:

    对于 Subversion 1.8 The Natural Way (tm) 是使用新选项 --search + --search-and 过滤日志

    svn log --search #s1322 URL

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

    【讨论】:

    • 本例中的#s1322 和 URL 是什么?两者都是搜索模式吗?
    • @Exa - OP 写道“...在提交消息中搜索故事代码”。 URL 不是模式,是远程仓库的 URL
    【解决方案2】:

    这不行吗?

    svn log | grep "something"
    

    【讨论】:

    • 我们的大多数开发人员都使用 Windows,并且没有太多的 unix 知识。如果它是一个可以在任何平台上使用的工具,那就太好了。
    • 您可以在 Windows 上安装 Cygwin,并使用 grep(以及其他出色的 'nix 实用程序)。它甚至没有那么混乱的安装;它是独立的,您只需将其放在您的路径上即可。你会很高兴你做出了努力。它可能非常有用。
    • 我在 Windows 环境中使用GnuWin utils,所以操作系统在这里不是问题。并且管道几个简单的程序是一个非常强大的概念,你应该学会有效地工作。
    • 我也建议您安装Cygwin,但将其添加到系统路径可能会导致问题。如果您不想要Cygwin,您可以安装svn 命令行客户端(如SilkSVN)并使用find 而不是grep,正如William 指出的那样。
    • 嗯,如果你有 40K 次提交,不确定这是否很快。
    【解决方案3】:

    the_void 的答案的 Windows 版本:

    svn log | find "something"
    

    【讨论】:

    • 我正在运行 XP SP3,它就在那里。在 Vista 和 Win7 中也经过验证。
    • 好像这样只显示日志内容,不显示修订号,这是我真正需要的...
    • @Emerson 如果你使用 --xml 和 svn 日志,然后通过某种 xquery-grep-thing 运行它(如果存在这样的东西)
    【解决方案4】:

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

    从命令行:

    svn 日志 > svn.out

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

    【讨论】:

    • 我知道你可以做到这一点,但我期待一些更直接的东西......无论如何,我正在使用 svnkit 做一个快速的 webapp 来搜索 svn 的代码并返回正确的命令.. .
    【解决方案5】:

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

    下面是搜索日志的代码的主要部分。我必须使用临时文件夹来使用“SVNWCUtil.createDefaultAuthenticationManager”,这样它就不会与我在应该运行该工具的同一框中的 cmd 行 svn 工具的 svn 配置相混淆。如果有足够的兴趣,我可以将整个 webtool 开源。如果您有兴趣,请告诉我(可能对答案投票?)。

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多