11

我的 git 树深处有一个文件:

$ git ls-files | grep /Expression.java
sm/src/main/java/cl/utilities/sm/Expression.java

我想获得它的活动日志,而不必输入整个路径。基本上我想要这个输出:

$ git log --oneline -2 sm/src/main/java/cl/utilities/sm/Expression.java
2718cdc cleaned up some warnings
f30cf15 Added missing @Overrides

...但无需键入sm/src/main/java/cl/utilities/sm. 我尝试了很多东西,但都没有奏效:

$ git log -- \*/Expression.java
$ git log -- \*Expression.java
$ git log -- \*\*/Expression.java
$ git log -- '*/Expression.java'
$ git log -- '**/Expression.java'
4

3 回答 3

7

使用通配符,不需要转义或引号:

git log -- */Expression.java

在 cmd shell 和 git bash 中在 Windows 7 上进行了测试。

根据您的外壳,您可能需要引号——如果单引号不起作用,请尝试双引号。

于 2014-05-02T17:48:50.223 回答
3

使用xargs

find . -name 'Expression.java' | xargs git log --oneline -2
于 2012-03-22T14:16:15.197 回答
3

在 git 2.8(2016 年 3 月)中,通配符作为pathspecrefspec得到了更牢固的支持。

请参阅Jeff King ( )的commit aac4faccommit df714f8commit 1cc777d(2016 年 2 月 10 日) 。(由Junio C Hamano 合并 -- --提交 e6a6a76中,2016 年 2 月 24 日)peff
gitster

这意味着:

  • 通配符适用于路径规范:

      git log -- "*.t"
      # or
      git log    "*.t"
    
  • 通配符适用于 refspecs(例如,在搜索以 ' b' 开头的提交消息时):

      git log "HEAD^{/b.*}" --
      # or
      git log "HEAD^{/b.*} 
    
于 2016-02-25T08:37:52.800 回答