显示文件在git仓库中的位置?

wz1wpwve  于 2023-03-11  发布在  Git
关注(0)|答案(2)|浏览(154)

我的git仓库里有一个文件Foo.txt,我想知道它在哪里。
我可以使用find . -name Foo.txt在文件系统中搜索该文件,但这有两个问题:
1.我有很多未跟踪的目录,我不关心其中存在的任何巧合的Foo.txt文件
1.我有很多未跟踪的目录,find将浪费大量时间毫无意义地搜索它们
但是,我知道git索引了存储库中的所有文件,并且可以非常快地返回它们,如果我使用git ls-files,它将在毫秒内打印出存储库中所有被跟踪的文件。
所以当我想找到文件时,我确实可以执行git ls-files | grep Foo.txt,但是:
1.我觉得我不应该输入| grep,我是一个懒惰的流浪汉,宁愿在StackOverflow上问这个问题,也不愿每次我想永远这样做的时候永远输入| grep
1.这感觉就像cat Foo.txt | grep some_patternproblem,其中 * 您应该只执行 * grep some_pattern Foo.txt
1.每当您向stdout和grep发送一个巨大的文本块以获得您想要的内容 * 而不是使用该工具来实现它的设计目的 * 时,就会有一个天使失去翅膀
1.好吧,我可以在.zshrc中定义一个函数来完成这个任务,但这不可能是正确的方法,对吗?
此外,git-ls-filesdocumentation似乎并不表明我想要的是可能的。我注定要永远通过自定义的zshrc函数来grepping git ls-files的输出吗?

col17t5w

col17t5w1#

我发现我可以用这样的东西:

git ls-files '*Foo.txt*'

我没有检查边缘情况,但是在我的测试中,输出似乎与grep的输出相同(这里,'*config.js*'将匹配任何tsconfig.json文件,就像grep版本一样)。
引号是必需的(没有引号,它只会检查当前文件夹,因为shell会展开星号)

9gm1akwq

9gm1akwq2#

尝试一下路径规范魔法,

git ls-files -- ':(glob)**/Foo.txt'

但是考虑到单词的数量,我认为grep更简单。

相关问题