在几个Gitolite存储库中有一堆git项目。有没有办法搜索Gitolite仓库中包含的关键字源?
我希望能够在所有git项目中搜索关键字,而无需先在本地手动克隆每一个。对于由Jenkins构建的项目,源可以在可以搜索的目录中公开。但并非所有这些都是以这种方式建造的。
答案 0 :(得分:1)
我通过电子邮件发送的前同事知道如何做到这一点。在存储repo的机器上,cd进入包含项目的repository目录。在单个项目的.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
答案 1 :(得分:0)
Gitolite只是一个authorization layer,拦截:
,并决定是否允许git命令继续。
它与搜索功能本身无关。
您需要另一个应用来在您的git仓库中实现搜索,例如 Elasticsearch 。
请参阅“Searching a git repository with ElasticSearch”。
然后你可以将它与gitolite结合(为了允许搜索或过滤搜索结果,具体取决于gitolite访问规则)。
答案 2 :(得分:0)
好吧,你总是可以创建一个“grep”命令。毕竟,如果你可以运行'symbolic-ref',grep会是什么?
一个问题是,gitolite对允许的字符的限制会使提供的任意正则表达卷曲。 (如果有人真的,真的想要这个 - 而且我的意思是他们在邮件列表上询问并且至少有几个人在说“是的,我们想要它!”,我可以创造一种允许某些程序具有不受限制的参数的方法。该代码只是等待从'git-annex'分支中删除,但到目前为止还不喜欢测试。
你甚至可以让它搜索多个项目。例如,要使其搜索 all 用户具有读取权限的项目,您可以从这开始:
gitolite list-phy-repos | gitolite access % $GL_USER W any | grep -v DENIED | cut -f1
然后对于每个出现的repo,你进入它并运行'git grep'
复杂性的下一个阶段是您要搜索/不搜索的回购列表(因为您恰好是有权访问所有回购的人,这不是真的你要!)。这有点难以设计。使用某种类型的组名在conf文件本身中标记可搜索的repos可能更容易。 grep命令可以轻松地检查该特殊组中的成员资格作为附加约束。
Sitaram