2010-09-13 83 views
7

我需要搜索Subversion版本庫的所有修訂版,以查找包含特定字符串的文件名和版本號。我知道這將在轉儲中發現:如何查找/搜索/ grep SVN信息庫歷史記錄?

svnadmin dump $REPO_PATH | grep -i "Verdana" 

但輸出太神祕了。輸出將包含匹配的二進制文件塊。

我一直在使用這樣的命令,在項目的當前工作的副本以搜索字符串:

find . -name "*.css" -print0 | xargs -0 grep "Verdana" 

輸出的格式是有用的,它給雙方的文件名和行中的字符串發生:

./css/forms.css: font  : 12px Verdana; 

有什麼辦法來搜索一個SVN倉庫的發言權的所有修訂,所有.css包含搜索字符串的文件?而不僅僅是一個字,而是一個帶有通配符的字符串或像grep這樣的正則表達式?

注意:我有Linux存儲庫的Linux服務器的root權限。

另請注意:我不想搜索工作副本,我需要搜索所有修訂版。

+0

可能的重複[排除.svn目錄從grep](http://stackoverflow.com/questions/1491514/exclude-svn-directories-from-grep) – 2017-01-18 11:32:17

+0

這絕對不是如何排除.svn目錄從grep ... – quickshiftin 2018-01-29 15:40:20

回答

0

你有你的根目錄嘗試

svn log --verbose 

,打印每個日誌信息,所有受影響的路徑。它不會讓你解析文件內容,但你我至少能夠搜索.css文件。

+0

是的,似乎有很多解決方案來搜索文件名。內容更加棘手。 – Liam 2010-09-14 09:48:41

+0

您可以使用'diff'來在最新版本和任何以前的版本之間生成純文本輸出。也許你甚至可以根據'svn log'的結果限制'diff'到某些文件。 – zellus 2010-09-14 13:28:08

+0

http://stackoverflow.com/questions/1118051/how-do-i-search-all-revisions-of-a-file-in-a-subversion-repository幾乎是這個問題的重複,但搜索所有修訂只有一個文件。 http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=627008似乎是一個有趣的方法,但不是開箱即用。 – zellus 2010-09-14 13:56:10

5

最簡單(也是最有效的方法)就是這樣做的,而且需要一點時間投資 - 將svn倉庫複製到git中,然後使用gitk搜索倉庫。

由於整個存儲庫都位於您的本地系統上,因此它使搜索的速度更快,無限增加

我曾經爲大約30位開發人員管理一個大型的Subversion版本庫,他們經常來我的辦公桌問:「你能找到這個改變嗎?」等等。我只是開啓了gitk!

svn log是非常慢,因爲它必須擊中服務器。此外,如果您有權訪問服務器,則可能需要設計一些| grep -v或類似文件來清除所有.svn目錄。

0

沿線認爲:

svn log $location -q | grep -P 'r\d+' -o | grep -P '\d+' -o | xargs -l1 svn diff -c | grep $pattern 

我想通過調整你給到grep標誌或(一個循環可能通過管道,而不是使用xargs的)寫一個更復雜的管道,你可以grep SVN任何事物的歷史。

相關問題