2011-06-27 11 views
24

Me gustaría encontrar confirmaciones en mi base de código que agreguen archivos de video para descartarlos. ¿Hay alguna manera de buscar estos archivos en git?Buscar asignaciones que modifican nombres de archivos que coinciden con un patrón en un repositorio GIT

Por ejemplo, todos los videos tienen un nombre de archivo que termina con la extensión .wmv; Me gustaría encontrar todos los commits que introducen estos archivos y deshacerse de ellos con una corrección o algo así.

¿Alguna idea?

Respuesta

30

puede utilizar git log con un pathspec:

git log --all -- '*.wmv' 

esto le ayudará a todos los envíos que hacen cambios a los archivos .wmv. sí, esto también descenderá a los subdirectorios (pero debe rodear su pathspec con comillas simples, por lo que se pasará como está a git).

si sólo está interesado en cometer hashes (scripting etc.) utilizan la maquinaria directamente git rev-list:

git rev-list --all -- '*.wmv' 
+1

Eso no pareció funcionar en absoluto. No tengo nada después de estos dos comandos y una larga espera. – Bastes

+0

@bastes: entonces hay archivos n.o wmv en sus árboles ... la respuesta de @adl es mejor aunque – knittl

+0

No, esto no funciona. Intento git log --all - '\ *. Java' y no consigo nada mientras lo encuentro. -name '\ *. java' lista todos los archivos. –

5

Si desea eliminar estos archivos de todos sus confirmaciones, considere volver a escribir toda la historia con el filter-branch mando. Por ejemplo,

git filter-branch --index-filter 'git rm --cached --ignore-unmatch -r *.wml' HEAD 
+0

Bueno, eso es más o menos lo que pretendo hacer. Gracias por el comando. – Bastes

0

Sí, como se ha mencionado, creo que el thinko es que la eliminación de las confirmaciones que introducen ellos no va a quitar las manchas

Ver http://progit.org/book/ch9-7.html#removing_objects para un tratamiento extenso del tema y ejemplos

+0

Enlace muy útil, muchas gracias. – Bastes

+0

Ese enlace ahora está roto: Pruebe https://git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery#Removing-Objects – Eosis

0

Si el objetivo es eliminar los archivos desde el repositorio (la historia de la reescritura de este modo), utilice el BFG Repo-Cleaner, por ejemplo:

bfg --delete-files '*.wmv' --private --no-blob-protection 

Si los archivos son relevantes, puede mantenerlos bajo control de versión usando Git LFS. Para migrate (también reescribir la historia), se hace algo como:

git-lfs-migrate \ 
    -s original.git \ 
    -d converted.git \ 
    -l https://user:[email protected]:8080 \ 
    '*.wmv' 

lista A simple o examinar las confirmaciones, me refiero a la respuesta de knittl:

git rev-list --all -- '*.wmv' 
git log --all -- '*.wmv' 
0

Esto puede funcionar en gitk así, usando View/New View/Enter files y directories para incluir, uno por cuadro de línea.

Pero tenga en cuenta que necesita un comodín que cubra la sección de ruta del nombre del archivo, de lo contrario, no se mostrará nada. (!)

por ejemplo, si ha tenido un archivo llamado backup-script.sh, con una vida variada que aparecen en diferentes lugares en el árbol de archivos y desea ver todas las versiones, a continuación, debe especificar:

*/backup-script.sh 
1

puede probar esto:

git log --follow *.wmv 

esto mostrará todos los envíos (con hash) que modificaron los archivos WMV.

+0

No es exactamente lo que OP necesita: '--siguiente 'funciona solo para un archivo en el último Git. – wotopul

Cuestiones relacionadas