【问题标题】:Using path wildcards in git log在 git log 中使用路径通配符
【发布时间】:2012-04-07 02:40:15
【问题描述】:

我的 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'

【问题讨论】:

  • git log -- */Expression.java 应该可以工作,很奇怪
  • 在我的 Windows 7 命令外壳 git log "*/Expression.java" 工作,但单引号不起作用。

标签: git wildcard git-log


【解决方案1】:

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

git log -- */Expression.java

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

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

【讨论】:

【解决方案2】:

使用xargs:

find . -name 'Expression.java' | xargs git log --oneline -2

【讨论】:

  • 假设文件在本地存在。如果要记录已删除的文件怎么办?
【解决方案3】:

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

参见Jeff King (peff)commit aac4faccommit df714f8commit 1cc777d(2016 年 2 月 10 日)。
(由 Junio C Hamano -- gitster -- 合并于 commit e6a6a76,2016 年 2 月 24 日)

这意味着:

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

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

      git log "HEAD^{/b.*}" --
      # or
      git log "HEAD^{/b.*} 
    

【讨论】:

  • 您介意链接到文档或解释 refspecs 格式的具体作用吗?
  • @Razor 当然可以。我已经编辑了答案以添加请求的链接。
猜你喜欢
  • 2015-09-19
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 2011-08-06
  • 2012-11-21
  • 2012-06-06
  • 1970-01-01
相关资源
最近更新 更多