2012-03-22 89 views
8

通配符我有一個​​文件內心深處在我的git樹:使用路徑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

git的日誌 - \ */Expression.java應該工作,怪異 – 2012-03-22 15:47:32

+0

在我的Windows 7命令外殼git的日誌 「*/Expression.java」 的作品,但單引號不起作用。 – yoyo 2014-05-02 17:22:34

回答

3

使用通配符,沒有逃逸或報價要求:

git log -- */Expression.java 

測試在Windows 7在cmd shell和git bash中。

根據您的shell,您可能需要引號 - 如果單引號不起作用,請嘗試雙引號。

+0

確認這對我現在有效。看起來我是這個時候可用的幾個git版本中存在的bug的受害者。正如http://git-blame.blogspot.com/2012/01/git-1776-1784-and-179-rc2.html中所述,此修復程序是https://github.com/git/git/commit/5c8eeb8。它首先在1.7.7.6中出現,在我問我的問題之前幾個月才發佈。 – 2014-05-03 01:51:10

3

使用xargs

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

假設文件在本地存在。如果您想記錄已刪除的文件,該怎麼辦? – yoyo 2014-05-02 17:22:58

0

隨着git 2.8(2016年3月),通配符更穩固地支持作爲pathspec或refspec。

請參閱commit aac4fac,commit df714f8,commit 1cc777d(2016年2月10日)作者:Jeff King (peff)
(在commit e6a6a76Junio C Hamano -- gitster --合併,2016年2月24日)

這意味着:

  • wilcard與pathspecs工作:

    git log -- "*.t" 
    # or 
    git log "*.t" 
    
  • 通配符可與refspecs(搜索時對於以'b'開頭的提交消息):

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