2012-11-29 39 views
2

在幾個Gitolite存儲庫中有一堆git項目。有沒有辦法在Gitolite倉庫中搜索包含關鍵字的源代碼?在Gitolite倉庫搜索源的方法?

我希望能夠搜索所有關鍵字git的項目,而無需手動克隆他們中的每一個當地第一。對於由Jenkins構建的項目,源代碼將顯示在可以搜索的目錄中。但並非所有這些都是以這種方式建造的。

回答

0

Gitolite只是一個authorization layer,其攔截:

  • GIT中命令
  • 用戶ID

,並且決定如果git的命令被允許繼續進行。

它無關,與搜索功能本身。

你需要另一個應用程序實現了搜索本身在你的git倉庫,像Elasticsearch
見 「Searching a git repository with ElasticSearch」。

然後,您可以將其耦合與gitolite(爲了讓搜索或過濾的搜索結果,這取決於gitolite訪問規則)。

,我通過電子郵件發送
+0

感謝您的搜索服務的建議,但它看起來像有一種方法可以從具有回購(見我的回答)機器搜索的來源。 –

+0

@CincinnatiJoe真實,但它純粹是一個git搜索,並且與Gitolite無關。我的回答解決了你問題的Gitolite方面。對於純粹的git搜索,我會推薦'git grep'(* http://stackoverflow.com/questions/2928584/how-to-grep-search-committed-code-in-the-git-history),而* not *刷新'.git'。 – VonC

+0

我看到git grep對搜索一個已克隆的項目是非常有用的。但我的問題是如何搜索回購中的所有項目,而無需首先在本地克隆所有項目。我剛剛發現要這樣做的方式是登錄到回購機器,並在回購中的每個項目的循環中使用git grep。如果有不同的/更好的方式不涉及到回購機器,我很樂意聽到它(並且不涉及安裝單獨的服務,因爲這可能不經常需要)。 –

1

遇到以前的同事知道的方式來做到這一點。在存儲回購站的機器上,cd進入包含項目的存儲庫目錄。在單個項目的.git目錄中,可以在HEAD或分支上使用「git grep」。在所有迪爾斯搜索,使用一個循環從項目迪爾斯的DIR:

for x in *; do 
    cd $x 
    git grep "MyString" HEAD 
    cd .. 
done 

有更多的選擇,包括一個包含每個匹配項目的名稱的例子:

for x in *; do 
    cd $x 
    git grep -i "mystring" HEAD -- '*.java' | sed "s|\(.*\)|$x-->\1|" 
    cd .. 
done 
0

嗯,你總是可以創建一個「grep」命令。畢竟,如果你可以運行'symbolic-ref',什麼是grep?

一個問題將是gitolite對允許的字符限制將使供應任意正則表達式的壓接。 (如果真的有人,真的想要這個 - 我的意思是他們要求在郵件列表中,至少有更多的人在說「是的,我們想要它!」),我可以創建一種方法來允許一些程序擁有無限制的參數。這個代碼只是等待從'git-annex'分支中被取消,但到目前爲止沒有對測試的熱愛)。

你甚至可以讓它搜索多個項目。例如,爲了使搜索用戶有讀訪問所有的項目,你可以用這個啓動:

gitolite list-phy-repos | gitolite access % $GL_USER W any | grep -v DENIED | cut -f1 

,然後與你進入這個目錄並運行「混帳出現各回購grep」可以

在複雜的下一階段將是您想要搜索/搜索不到(因爲你恰好是誰有權訪問所有回購的傢伙回購的列表,這不是真的是你想要的!)。這有點難以有效設計。使用某種類型的組名可能更容易在conf文件中標記可搜索的回購站。 grep命令可以輕鬆檢查該特殊組中的成員資格,作爲附加約束。

Sitaram