2011-11-04 12 views
28

Dado un período de tiempo (por ejemplo, un día, una semana, un mes), ¿es posible enumerar todos los archivos que se modificaron? o agregado en este momento?git: enumere todos los archivos agregados/modificados en un día (o semana/mes ...)

+0

Gracias, ¡todos por las muchas soluciones diferentes! Me gustaría aceptarlos a todos ya que todos resuelven mi pregunta. Acepto la solución de @inger porque me gusta tener el indicador modificado/agregado ... – thias

+0

Actualmente, el estado del nombre también funciona con 'git log'. También, por favor, no los comentarios de mi respuesta, que señalan una limitación ... aclararé pronto. – inger

Respuesta

29

que haría uso de diff para producir la lista de archivos directamente, por ejemplo:

git diff --name-only "@{3 days ago}" "@{2 days ago}" 

changelog.txt 
newfile.txt 

En caso de que tenga curiosidad sobre qué archivo se modificó o agregó, use --name-status en su lugar:

git diff --name-status "@{3 days ago}" "@{2 days ago}" 

M  changelog.txt 
A  newfile.txt 
+2

Tenga en cuenta que la notación @ {...} puede no ser confiable -puede tener una granularidad mucho más gruesa que las confirmaciones reales- porque usa entradas de rev-log para asignar fechas a commits, y las entradas solo se agregan al rev-log para _your_ actions (y no, por ejemplo, para cada commit en un tirón). – snogglethorpe

+0

¿Quiere decir reflog? De todos modos, gracias por el recordatorio - Lo habría usado - desde y hasta - pero eso no parece dar los resultados esperados. ¿Conoces una alternativa más confiable? – inger

+0

Sí, reflog :) (argh, ¿por qué no puedes editar comentarios pasados ​​5 minutos ...) – snogglethorpe

4

Probar:

git log --since="2 days ago" --until="1 days ago"

Si omite --until obtendrá los registros de los últimos dos días. También puede especificar semanas, meses, etc. También puede usar git diff con --since y --un parámetro. Trabaja un poco en el formato de salida y listo.

20

Tal vez esto:

git log --since="1 day ago" --name-only --pretty=format: | sort | uniq 

Incluir --until si quieres por un día, semana, etc.

+0

Puede ahorrar un comando usando -u: 'git log --since =" 1 día atrás "--name only --pretty = format: | ordenar -u' .. Incluso pensó esto aún más complicado que un simple 'git diff' .. que OTOH, puede tener un problema con el git actual (ver los comentarios de mi respuesta). – inger

+0

No estoy seguro sobre el uso de uniq en esta solución. Puede haber diferentes confirmaciones con el mismo número de archivos modificados, inserciones y eliminaciones, que se desvanecerán si canaliza el resultado a través de uniq. – i4h

9

Git whatchanged debe darle lo que desea, enumerando qué archivos se han modificado.

Aquí hay un ejemplo usando Git fuente:

$ git --version 
git version 1.7.8.rc0.35.gee6df 
$ git whatchanged --since '10/27/2011' --until '10/30/2011' --oneline 
55e7c0a (squash) test for previous 
:100755 100755 dbf623b... 53905a2... M t/t8006-blame-textconv.sh 
2564aa4 blame.c: Properly initialize strbuf after calling, textconv_object() 
:100644 100644 173f286... e39d986... M builtin/blame.c 
e8e1c29 Update draft release notes to 1.7.8 
:100644 100644 3045245... ddb8d37... M Documentation/RelNotes/1.7.8.txt 
8debf69 clone: Quote user supplied path in a single quote pair 
:100644 100644 488f48e... efe8b6c... M builtin/clone.c 
16

Lo utilizo para obtener una lista limpia:

git whatchanged --since '04/14/2013' --until '05/22/2014' --oneline --name-only --pretty=format: | sort | uniq >> changedlist.txt 
+0

¿Cómo ejecutar un comando similar para ver qué archivos no han cambiado desde el 14/04/2015 hasta el 22/05/2014 o dentro de los últimos 7 días por semana? Gracias. –

+0

He publicado una respuesta aquí: http://stackoverflow.com/questions/31443727/git-how-to-list-all-files-that-have-not-been-changed-since-a-certain-date which deals con lo contrario de lo que ha solicitado esta publicación, pero es útil. –

3

Aquí está uno más, sin líneas vacías:

git log --after="2015-11-05T16:36:00-02:00" --before="2015-11-15T16:36:00-02:00" --pretty=format:"" --name-only | sed '/^\s*$/d' | sort | uniq -u 
Cuestiones relacionadas