【发布时间】:2015-07-28 11:49:25
【问题描述】:
我的存储库中有一个文件,我想对其使用 git blame,但我不确定它的路径是什么。
我已经设法像这样使用 git log:
git log -- '**/somefile'
但我似乎无法对 git blame 做同样的事情。有可能吗?
如果相关,我正在使用 mysysgit(git 版本:1.9.5.msysgit.1)。
【问题讨论】:
我的存储库中有一个文件,我想对其使用 git blame,但我不确定它的路径是什么。
我已经设法像这样使用 git log:
git log -- '**/somefile'
但我似乎无法对 git blame 做同样的事情。有可能吗?
如果相关,我正在使用 mysysgit(git 版本:1.9.5.msysgit.1)。
【问题讨论】:
你必须先找到文件:
git ls-files -- '**/somefile'
然后在返回的路径上使用git blame。
【讨论】:
git ls-files -- '**/somefile' | xargs git blame 应该是最好的解决方案。
git blame 不接受多个文件,如果您将它与xargs 一起使用,您需要告诉它一次只传递一个文件:git ls-files -- '**/somefile' | xargs -n1 git blame
这在 OS X 上的 Bash 中对我来说很好用:
git blame -- **/foo.json
我不得不去掉引号才能让它工作......
【讨论】:
shopt globstar检查
globstar 如@MatthewBuckett 所说启用。结果是:如果一个或多个文件与 glob 匹配,则 glob 参数将替换为所有匹配的文件(我认为每个文件都用空格分隔),或者,如果没有文件与 glob 匹配,则参数不变,这解释了 OP 得到的错误 fatal: no such path '**/somefile' in HEAD:没有文件与 shell 扩展匹配,所以 Git 确实收到了 **/somefile 作为参数,Git 也找不到。