2

在几个 Gitolite 存储库中有一堆 git 项目。有没有办法在 Gitolite 存储库中搜索关键字的来源?

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

4

3 回答 3

1

我通过电子邮件发送的一位前同事知道这样做的方法。在存储 repo 的机器上,cd 进入包含项目的存储库目录。在单个项目的 .git 目录中,您可以在 HEAD 或分支上使用“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
于 2012-12-03T20:32:43.117 回答
0

Gitolite 只是一个授权层,它拦截:

  • git 命令
  • 用户身份

, 并决定是否允许 git 命令继续。

它与搜索功能本身无关。

您需要另一个应用程序来在您的 git 存储库中实现搜索本身,例如Elasticsearch
请参阅“使用 ElasticSearch 搜索 git 存储库”。

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

于 2012-11-29T20:07:31.810 回答
0

好吧,你总是可以创建一个“grep”命令。毕竟,如果你可以运行 'symbolic-ref',那么 grep 是什么?

一个问题是 gitolite 对允许字符的限制会限制提供的任意正则表达式。(如果有人真的,真的想要这个——我的意思是他们在邮件列表中询问,并且至少有更多的人说“是的,我们想要它!”),我可以创建一种方法来允许一些程序有不受限制的论点。该代码只是等待从'git-annex'分支中提取,但到目前为止还没有对测试的热爱)。

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

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

然后对于提出的每个 repo,你 cd 进入它并运行 'git grep'

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

西塔拉姆

于 2012-12-23T14:50:52.877 回答