Como se menciona en " git: ¿Cómo agrego recursivamente todos los archivos en un subárbol de directorio que coinciden con un patrón global? ", Si escapa correctamente o cita su globbing de camino específico (como '*.java'
), entonces sí, git add'*.java'
Git 2.13 (Q2 2017) mejora eso para la adición interactiva:
Ver commit 7288e12 (14 de marzo de 2017) por Jeff King ( peff
) .
(Fusionada por Junio C Hamano - gitster
- en commit 153e0d7 , 17 mar 2017)
add --interactive
: no expanda las rutas de acceso con ls-files
Cuando queremos obtener la lista de archivos modificados, primero expandimos las especificaciones de ruta proporcionadas por el usuario con " ls-files
", y luego alimentamos la lista resultante de rutas como argumentos para " diff-index
" y " diff-files
".
Si su ruta específica se expande en una gran cantidad de rutas, puede encontrarse con uno de dos problemas:
El sistema operativo puede quejarse del tamaño de la lista de argumentos y negarse a ejecutarse. Por ejemplo:
$ (ulimit -s 128 && git add -p drivers)
Can't exec "git": Argument list too long at .../git-add--interactive line 177.
Died at .../git-add--interactive line 177.
Eso está en el linux.git
repositorio, que tiene alrededor de 20K archivos en el directorio "drivers" (ninguno de ellos modificado en este caso). El " ulimit -s
" truco es necesario para mostrar el problema en Linux incluso para un conjunto de caminos tan gigantesco.
Otros sistemas operativos tienen límites mucho más pequeños (por ejemplo, se vio un caso del mundo real con solo archivos de 5K en OS X).
Incluso cuando funciona, es realmente lento. El código de camino específico no está optimizado para grandes cantidades de caminos. Aquí está el mismo caso sin el ulimit:
$ time git add -p drivers
No changes.
real 0m16.559s
user 0m53.140s
sys 0m0.220s
Podemos mejorar esto omitiendo " ls-files
" por completo y simplemente alimentando las rutas de acceso originales a los comandos diff.
Históricamente, el lenguaje pathpec soportado por " diff-index
" era más débil, pero ese ya no es el caso.