grep多个git存储库中的东西

时间:2012-07-18 14:24:05

标签: git gitosis

所以我从其他一些开发人员那里继承了一个相当大的代码库,代码存储在各种git存储库中。

有时,很难知道特定代码片段可能存在于哪个项目中,或者该代码片段是否存在于git中。

我希望能够做的是为一些特定的文本grep所有项目。

我正在使用gitosis,因此所有git存储库都存储在/ home / git / repositories中,结构如下:

/home/git/repositories
  |- project1
    |- HEAD
    |- branches
    |- config
    |- description
    |- hooks
    |- info
    |- objects
    |- refs
  |- project2
    |- ...

我已经尝试过对象目录中的东西执行递归grep,如下所示:

grep -Hr "text" /home/git/repositories/*/objects

这当然无法正常工作,因为对象存储在git的自定义格式中。

做什么?

3 个答案:

答案 0 :(得分:5)

git grep与ref或--no-index

一起使用
cd /home/git/repositories
for i in *; do ( cd $i; git grep text HEAD ); done

答案 1 :(得分:3)

我知道它的旧问题但是如果你使用命令行,你可以将其添加到bash_profilebashrc

ggrep() {
    find . -type d -name .git | while read line; do
        (
        cd $line/..
        cwd=$(pwd)
        echo "$(tput setaf 2)$cwd$(tput sgr0)"
        git grep -n "$@"
        )
    done
}

上述功能的基本要点是搜索包含.git的所有目录,然后首先输出该目录,然后输出该令牌发生的行号

然后转到/home/git/repositories并使用

进行搜索

ggrep "InvalidToken"

它会像这样输出

/home/git/org/repo1
/home/git/org/repo2
/home/git/org/repo3
/home/git/org/repo3
lib/v3/Utility.pm:59:         code              => 'InvalidToken',
lib/v3/Utility.pm:142:        code              => "InvalidToken",

你也可以传递像ggrep -i "search"这样的标志(用于不区分大小写的搜索)

答案 2 :(得分:0)

使用multi。它是通过多个存储库一次专门写入git grep的。

$ ls
vim spring-framework gradle phantomjs
$ multi -i "fantastic"
vim
====================================================
runtime/doc/quotes.txt:VIM 4.5 is really a fantastic editor.  It has sooooo many features and more
runtime/doc/quotes.txt:fantastic it is! (Tony Nugent, Australia)
spring-framework
====================================================
gradle
====================================================
subprojects/docs/src/docs/userguide/ant.xml:        simply by relying on Groovy, and the fantastic <literal>AntBuilder</literal>.
subprojects/docs/src/docs/userguide/buildScriptsTutorial.xml:            relying on Groovy. Groovy is shipped with the fantastic <literal>AntBuilder</literal>. Using Ant tasks
subprojects/docs/src/docs/userguide/ideSupport.xml:            if you do this you have a fantastic IDE support for developing Gradle scripts. Of course if you use
phantomjs
====================================================
test/ghostdriver-test/fixtures/common/macbeth.html:<A NAME=1.3.55>Are ye fantastical, or that indeed</A><br>
test/ghostdriver-test/fixtures/common/macbeth.html:<A NAME=1.3.148>My thought, whose murder yet is but fantastical,</A><br>