2010-06-17 38 views
6

我希望能夠在svn的提交日誌中進行搜索。我知道你可以在烏龜身上做到這一點,但無法找到使用命令行的方式。如何在svn日誌中搜索

我們正在轉向兩層存儲庫方法,以便穩定分支只能完成並測試完整的故事。爲了實現這一點,我們需要一種在提交消息中搜索故事代碼的方法(例如:#s1322),並獲取後續合併命令中要使用的修訂列表。

例:searchsvnapp http://[repo位置根]#S1322

結果:4233,4249,4313

回答

1

我最終開發了我自己的工具,使用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; 
} 
6

這是不是工作?

svn log | grep "something" 
+0

我們的大多數開發人員都使用Windows並且沒有太多的UNIX知識。如果它是一個可以在任何平臺上使用的工具,那將是非常棒的。 – Emerson 2010-06-17 16:14:57

+0

您可以在Windows上安裝Cygwin,並使用grep(以及其他很棒的'nix工具)。這甚至不是一個安裝的混亂;它是獨立的,你只需將它放在你的道路上。你會很高興你付出了努力。這可能非常有用。 – 2010-06-17 16:44:32

+1

我在Windows環境中使用[GnuWin utils](http://gnuwin32.sourceforge.net/),所以操作系統在這裏不是問題。管道幾個簡單的程序是非常強大的概念,你應該學會有效地工作。 – chalup 2010-06-17 16:50:17

3

Windows版本the_void的回答:

svn log | find "something" 
+0

Windows XP說「查找」不是一個命令... – Emerson 2010-06-24 10:17:59

+0

我正在運行XP SP3,它在我身邊。還驗證了在Vista和Win7中的存在。 – 2010-06-24 14:49:47

+0

似乎這樣就只顯示日誌內容,不顯示版本號,這是我真正需要的... – Emerson 2010-06-28 09:10:06

1

首先,確保你有Subversion命令行(CollabNet的是我用的發行版),符合您的龜 '顛覆' 釋放。檢查「龜約盒」以查找Subversion版本。每個Subversion工具都有自己的Subversion客戶端副本,它們並不總是可以互換的。主要版本將打破兼容性。

在命令行:

SVN的日誌> svn.out

然後彈出它在你喜歡的編輯器!

+0

我知道你可以做到這一點,但我期望的東西更直接...無論如何,我正在做一個快速的Web應用程序使用svnkit來搜索svn的代碼並返回正確的命令... – Emerson 2010-06-28 09:11:28

8

針對Subversion 1.8自然的方式(TM)是使用了新的選擇--search + --search-and用於過濾日誌

svn log --search #s1322 URL

而且,順便說一句,每個故事可以分爲自己的分支機構 - 中這種情況下,根本不需要修訂範圍的檢測,您只需合併分支

+0

這個例子中的#s1322和URL是什麼?都是搜索模式? – Exa 2014-11-04 08:00:04

+0

@Exa - OP寫了「...在故事代碼的提交信息中搜索」。 URL不是模式,它是遠程回購的URL – 2014-11-06 04:02:28