2011-01-21 13 views
8

È possibile limitare la git log ricerca ad un file in questo modo:Con git, come si cerca un modello di file con `git log` invece di un percorso file?

git log [branch] -- foo.c 

Ma come è possibile limitare la ricerca a un modello di file invece di un percorso completo?

  • Si consideri che si può eseguire git log su un altro ramo, dove guscio espansione * non funziona, in modo da non può dipendere il guscio per fare il pattern matching file.
  • Inoltre, non è possibile specificare un ramo con git ls-files.
+0

sto iniziando a pensare che questa funzione non esiste come una semplice opzione da riga di comando ... – Neil

+0

forse questa è stata aggiunta a una versione successiva di git, ma questo funziona per me: 'git log -" */foo.c "', incluso con la specifica del ramo. – michael

risposta

9

tendo a fare le cose in questo modo:

git ls-files [--with-tree=<branch>] [path] | grep '<pattern>' | xargs git log [branch] 
+0

Non è possibile specificare un 'branch' con' git ls-files' come almeno git 1.7.3, quindi è necessario eseguire il checkout di ogni ramo. – Neil

+0

@Neil: Il mio male; eccoti. – Cascabel

+1

P.S. Si potrebbe anche usare 'ls-tree -r --name-only'. – Cascabel

8

O semplicemente cadere il leader ., vale a dire: git log -- *foo.c, o anche git log -- ./*foo.c

+1

Se si desidera una corrispondenza regex più complessa, utilizzare perl e reindirizzare l'output nel registro git - –

+1

Questo non è corretto. Troverà solo commit che corrispondono allo schema del file se il file esiste sul file system. * Sarà espanso dalla shell se il file esiste. Quindi, se esegui 'git log some_other_branch - * foo.c', non troverai quello che cerchi in tutti i casi. – Neil

+3

Non capisco i voti negativi qui (o i commenti "questo è sbagliato"). Basta citare il modello in modo che la shell non si aspetti il ​​carattere jolly (a meno che non fraintenda la domanda). E non c'è bisogno di (e non si è parlato di) regex completo per la corrispondenza del modello di file. Basta usare semplicemente: 'git log --name-only -" */* foo * "' (o 'git log {branch} ...' etc) e troverà tutti i file che corrispondono al pattern. – michael

Problemi correlati