在Gitolite repos中搜索来源的方法?

在Gitolite repos中搜索来源的方法?,git,gitolite,Git,Gitolite,在几个Gitolite存储库中有很多git项目。有没有办法搜索Gitolite repo中包含的源代码中的关键字 我希望能够在所有git项目中搜索关键字,而不必首先在本地手动克隆每个关键字。对于Jenkins构建的那些项目,源代码暴露在可以搜索的目录中。但并不是所有的建筑都是这样建造的 Gitolite只是一种截取: git命令 用户id ,并决定是否允许git命令继续 它与搜索功能本身无关 您需要另一个应用程序在git repo中实现搜索本身,如 见“” 然后,您可以将其与gitolite

在几个Gitolite存储库中有很多git项目。有没有办法搜索Gitolite repo中包含的源代码中的关键字

我希望能够在所有git项目中搜索关键字,而不必首先在本地手动克隆每个关键字。对于Jenkins构建的那些项目,源代码暴露在可以搜索的目录中。但并不是所有的建筑都是这样建造的

Gitolite只是一种截取:

  • git命令
  • 用户id
,并决定是否允许git命令继续

它与搜索功能本身无关

您需要另一个应用程序在git repo中实现搜索本身,如
见“”


然后,您可以将其与gitolite结合使用(以便允许搜索或过滤搜索结果,具体取决于gitolite访问规则)。

我通过电子邮件发送的一位前同事知道一种方法。在存储repo的计算机上,将cd放入包含项目的存储库目录中。在单个项目的.git目录中,可以在头或分支上使用“git grep”。要在所有目录中搜索,请使用项目目录中的循环:

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

嗯,您可以创建一个“grep”命令。毕竟,如果你能运行“symbolic ref”,那么grep是什么

一个问题是gitolite对允许的字符的限制会对提供的任意正则表达式造成影响。(如果有人真的,真的想要这个——我的意思是,他们在邮件列表上询问,至少还有几个人插嘴说“是的,我们想要它!”),我可以创造一种方法,允许一些程序有不受限制的参数。这段代码正等待着从“git附件”分支中删除,但到目前为止,还没有人喜欢测试)

你甚至可以让它搜索多个项目。例如,要使其搜索用户具有读取权限的所有项目,可以从以下内容开始:

gitolite list-phy-repos | gitolite access % $GL_USER W any | grep -v DENIED | cut -f1
然后,对于每一个回购协议,你将cd放入其中并运行“git grep”

复杂性的下一个阶段是你想搜索/不搜索的回购协议列表(因为你恰好是拥有所有回购协议访问权的人,而这并不是你真正想要的!)。这使得有效设计变得更加困难。在conf文件本身中,使用某种类型的组名标记可搜索的回购协议可能更容易。grep命令可以很容易地检查该特殊组中的成员身份,作为附加约束


Sitaram

感谢搜索服务的建议,但似乎有一种方法可以从具有repo的机器中搜索源代码(见我的答案)。@CincinnatiJoe true,但这纯粹是git搜索,与Gitolite无关。我的回答涉及到你问题的吉托利面。对于纯git搜索,我建议
git grep
(),而不要对
.git
进行grepping。我知道git grep对于搜索您克隆的一个项目是多么有用。但我的问题是如何搜索回购协议中的所有项目,而不必首先在本地克隆所有项目。我刚刚发现的方法是登录到repo机器,对repo中的每个项目在循环中使用git grep。如果有一种不同的/更好的方式不涉及回购机器,我很乐意听到(也不涉及安装单独的服务,因为这可能不经常需要)。