lunes, 14 de octubre de 2013

¿Cómo eliminar múltiples archivos de un repositorio git?

Estaba en la tarea de actualizar la version de Sencha Touch en un proyecto en el que estoy trabajando corriendo el muy conocido comando

sencha app upgrade /path/a/la/nueva/version

y pues al hacer las respectivas pruebas y arreglos, me puse en la tarea de actualizar el repositorio, por lo que, corrí el otro muy conocido commando

git status

Y oh sorpresa, existían muchos pero muchos archivos en diferentes carpetas que debían ser eliminados del repositorio, junto con muchos que debían ser agregados (al haber sido modificados y/o creados).

Para agregar los nuevos el siguiente commando hace el milagro

git add /path/

Pero para borrar no puedo usar simplemente

git rm .

dado que borraría TODOS los archivos.

¿Y el recontra conocido git -a o git -u?

Pues serviría siempre y cuando quieras subir TODOS tus cambios (y a veces no quieres hacer eso)

Entonces, ¿cuál es la solución?

Facilísimo:

git ls-files --deleted -z | xargs -0 git rm

Y bueno expliquemos un poco:

git ls-files: lista archivos del indice de git
--deleted: solo muestra los archivos eliminados
-z: pone \0 (el conocido NUL) como terminador del string (util si el path tiene espacios)
|: concatena la salida del primer commando con el siguiente
xargs: permite concatenar argumentos y pasarlos a un comando (en este caso git rm)
-0: utiliza \0 como character de separación (por esto usamos -z en git ls-files)

No hay comentarios.:

Publicar un comentario