用于在 Git 存储库中跨分支和历史搜索的工具

Kus*_*nda 6 software-rec git search

我正在寻找一种工具,或对脚本的建议,它能够根据文件名和文件内容(find/ 之grep类)在 Git 存储库中搜索文件。它不仅需要能够在当前签出的分支中进行搜索,而且还需要能够通过该分支的历史记录以及在其他分支中进行搜索。

我拥有的 Git 存储库的一个非常具体的示例是结帐dspinellis'unix-history-repo。我经常在那里寻找事物的历史实现,但是追踪文件很痛苦,因为我经常需要猜测我需要查看哪个分支(该存储库中有 165 个分支)。

事情的例子,我想用这个工具做的找到wow命令,这可能是一个外部命令内置命令shcsh在某些时候,如果它存在一些早期的BSD Unix的部分(如果它存在一点)。为此,我想在dspinellis 的 Git 存储库的 165 个分支中搜索wow.*文件名模式,以及可能在某个时候包含wowC 函数的文件。

Ste*_*itt 6

呵呵,猜猜我也在做什么...

要在所有分支中查找文件名,我使用

git log --all --name-only --pretty=format:%H -- wow\*
Run Code Online (Sandbox Code Playgroud)

wow可以用任何 glob 替换。这在 Unix 历史存储库上运行得非常快。该格式显示了导致创建匹配文件的哈希值,因此您可以在那时检查树并进一步探索。

要跨所有分支搜索文件内容,我使用

git rev-list --all | xargs git grep "excited too"
Run Code Online (Sandbox Code Playgroud)

它列出了所有提交对象并搜索它们。这在 Unix 历史存储库上非常非常慢;列出所有分支并在那里进行搜索会更快:

git grep "excited too" $(git branch -r | awk '{print $1}')
Run Code Online (Sandbox Code Playgroud)