2012-03-22 17 views
8

Ho un file in giù nel profondo del mio albero git:Utilizzando percorso caratteri jolly git log

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

mi piacerebbe ottenere un log della sua attività senza dover digitare l'intero percorso. Fondamentalmente voglio questa uscita:

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

... ma senza dover digitare sm/src/main/java/cl/utilities/sm. Ho provato un sacco di cose, ma nessuno di loro ha lavorato:

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

git log - \ */Expression.java dovrebbe funzionare, strano –

+0

Nel mio Windows 7 comando di shell git log "*/Expression.java" funziona, ma le virgolette singole non funzionano. – yoyo

risposta

3

Utilizzare un jolly, senza fughe o citazioni richieste:

git log -- */Expression.java 

testato su Windows 7 in shell cmd e git bash.

A seconda della shell, potresti avere bisogno di virgolette - se le virgolette singole non funzionano, prova le virgolette doppie.

+0

Confermato che questo funziona per me ora. Sembra che io sia stato vittima di un bug presente in alcune versioni di git disponibile in questo periodo. La correzione, come menzionato in http://git-blame.blogspot.com/2012/01/git-1776-1784-and-179-rc2.html, è https://github.com/git/git/commit/5c8eeb8. È apparso per la prima volta in 1.7.7.6, rilasciato appena un paio di mesi prima che facessi la mia domanda. –

3

uso xargs:

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

Ciò presuppone che il file esista localmente. Cosa succede se si desidera registrare un file che è stato cancellato? – yoyo

0

Con git 2.8 (marzo 2016), i caratteri jolly sono supportati più saldamente sia come pathspec che come refspec.

Vedi commit aac4fac, commit df714f8, commit 1cc777d (10 feb 2016) da Jeff King (peff).
(fusa per Junio C Hamano -- gitster -- in commit e6a6a76 24 Feb 2016)

Ciò significa che:

  • wildcard lavora con pathspecs:

    git log -- "*.t" 
    # or 
    git log "*.t" 
    
  • jolly funziona con refspecs (durante la ricerca per un messaggio di commit che inizia con 'b' per esempio):

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