2011-01-21 8 views
8

Puede limitar su búsqueda git log a un archivo de este modo:Con git, ¿cómo se busca un patrón de archivo con `git log` en lugar de una ruta de archivo?

git log [branch] -- foo.c 

Pero ¿cómo limitar la búsqueda a un patrón de archivo en lugar de una ruta completa?

  • Considere que usted puede funcionar git log en otra rama, donde Shell expansión de * no funcionará, por lo que no puede depender de la cáscara para hacer el patrón coincidente archivo.
  • Además, no puede especificar una rama con git ls-files.
+0

estoy empezando a pensar que esta característica no existe como una simple opción de línea de comandos ... – Neil

+0

quizás esto se haya agregado a una versión posterior de git, pero esto funciona para mí: 'git log -" */foo.c "', incluido con la especificación de la rama. – michael

Respuesta

9

que tienden a hacer cosas como esta:

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

No se puede especificar una 'bifurcación' con 'git ls-files' desde al menos git 1.7.3, por lo que tendrías que verificar todas las ramas. – Neil

+0

@Neil: Mi mal; ahí tienes. – Cascabel

+1

P.S. También podría usar 'ls-tree -r --name-only'. – Cascabel

8

O simplemente dejar caer el líder ., es decir: git log -- *foo.c, o incluso git log -- ./*foo.c

+1

Si desea una correspondencia de expresiones regulares más compleja, use perl y canalice la salida en el registro de git - –

+1

Esto es incorrecto. Solo encontrará confirmaciones que coincidan con el patrón de archivo si el archivo existe en el sistema de archivos. El * se expandirá por el shell si el archivo existe. Entonces, si haces 'git log_un_other_branch - * foo.c', no encontrará lo que estás buscando en todos los casos. – Neil

+3

No entiendo los votos hacia abajo aquí (o los comentarios "esto es incorrecto"). Simplemente cite el patrón para que el intérprete de comandos no espere el comodín (a menos que no entienda bien la pregunta). Y no hay necesidad de (ni hubo mención de) expresiones regulares completas para la coincidencia de patrones de archivos. Simplemente use: 'git log --name-only -" */* foo * "' (o 'git log {branch} ...' etc) y encontrará todos los archivos que coincidan con el patrón. – michael

Cuestiones relacionadas