En ocasiones necesitamos saber cuales son los archivos modificados en nuestras confirmaciones realizadas con git. ¿No se?, se me ocurre por ejemplo si deseo obtener esta lista para saber que archivos tengo que revisar ó cuales tengo que actualizar en algún servidor por poner algunos ejemplos.

Lista de archivos modificados en n confirmaciones previas El ejemplo mas simple

Por ejemplo si el día de hoy realice 3 confirmaciones, al final del día me gustaría obtener la lista del total de archivos modificados. Esto lo podemos hacer con el comando git-log, veamos este ejemplo:

# Archivos modificados hace 3 confirmaciones.
 git log -3 --name-only --pretty=format:''

Esto lo podemos ocupar para n confirmaciones previas, si sustituimos el -3 por el número de confirmaciones de las que interesan obtener la lista de sus archivos.

Lista de archivos modificados un un intervalo de tiempo definiendo un limite en tiempo

Quizás no recordemos exactamente cuantas confirmaciones hemos realizado un algun tiempo determinado, por ejemplo ¿que pasaría si nos interesa obtener es la lista de los archivos modificados hace 3 semanas al día de hoy?, no podríamos obtener esta lista con la instrucción anterior(ya que de momento no sabemos cuantas confirmaciones se han realizado).

Nos podemos ver tentados en realizar alguna búsqueda con el comando find partiendo de las fechas de modificación(ocupando el parámetro -mtime) de los archivos de nuestro repositorio, lo cual seguramente nos mostrara archivos propios del git que han sido modificados.

Por otra parte el  git-log nos proporciona parámetros(--before, --after, --since… ) para visualizar la bitacola en función del tiempo, veamos como seria esto con algunos ejemplos:

# Buscando archivos modificados hace 3 semanas(21 días) con el comando find
# Ojo: esta opción se requeriría filtrar para quitar los archivos del git
 find .  -mtime -21 -print 

# Archivos modificados después de hace 3 semanas, hasta antes al día de hoy :
 git log --before={today} --after={3.weeks.ago} --name-only --pretty=format:''

# Archivos modificados después de hace 2 días, hasta este momento :
 git log --before={now} --after={2.days.ago} --name-only --pretty=format:''

# Archivos modificados después de hace 2 días, hasta este momento
# Notar que es lo mismo que el ejemplo anterior sólo que son la opción "--since" :
 git log --since={2.weeks.ago} --name-only --pretty=format:'' | sort -u

Filtrando la lista poniéndonos creativos

En la lista puede que algunos archivos se repitan mas de una vez(ya que quizás fue modificado en varias confirmaciones),para esto una solución podría ser filtrar la lista para asegurar que los archivos no se repitan, para esto podemos ocupar el comando sort con la opción de único (-u esto con una tubería |), veamos como seria este filtro:

# Archivos modificados después de hace 3 semanas, hasta antes al día de hoy
git log --since={1.year.ago} --name-only --pretty=format:'' \
| sort -u

O quizás nos interesa obtener solo la lista de los archivos con alguna extensión(es), por ejemplo si nos interesa saber que archivos he modificado hace 3 semanas y que tienen la extensión php, css ó js. Para esto podemos hacer un filtro un poco mas detallado con el comando grep:

# Archivos modificados desde de hace 3 semanas y que ademas
# cumple que son archivos con la extensión: .php, .css ó js :
git log --since={3.weeks.ago} --name-only --pretty=format:'' \
| sort -u | grep -E '\.(php|css|js)$'

En general nos podemos poner mas curiosos de acuerdo a nuestras necesidades.

Mayor información:

Fitorec

Me gusta la programación, me fascina el software libre, mis lenguajes preferidos son PHP, JavaScript, Python y Bash (aunque me gusta programar en casi cualquier lenguaje), en sistemas operativos me gusta GNU/Linux.

Más Entradas - Website

Sígueme:
TwitterGoogle PlusYouTubeDelicious

Sin Comentarios

Puedes ser el primero en comentar.

Deja un comentario

Por favor, introduzca su nombre. Please enter an valid email address. Por favor, introduzca un mensaje.