Agregar archivos recursivamente por patrón
¿Cómo agrego archivos de forma recursiva según un patrón (o global) ubicado en diferentes directorios?
Por ejemplo, me gustaría agregar A/B/C/foo.java
y D/E/F/bar.java
(y varios otros archivos java) con un comando:
git add '*.java'
Desafortunadamente, eso no funciona como se esperaba.
Puede usarlo git add [path]/\*.java
para agregar archivos java desde subdirectorios,
por ejemplo , git add ./\*.java
para el directorio actual.
De git add
la documentación :
Agrega contenido de todos
*.txt
los archivos delDocumentation
directorio y sus subdirectorios:$ git add Documentation/\*.txt
Tenga en cuenta que el asterisco
*
aparece entre comillas en el shell en este ejemplo; esto permite que el comando incluya los archivos de los subdirectorios delDocumentation/
directorio.
La respuesta de Sergio Acosta es probablemente su mejor opción si es posible que algunos de los archivos que se agregarán aún no hayan sido rastreados. Si desea limitarse a los archivos que git ya conoce, puede combinarlos git-ls-files
con un filtro:
git ls-files [path] | grep '\.java$' | xargs git add
Git no proporciona ningún mecanismo sofisticado para hacer esto por sí mismo, ya que es básicamente un problema de shell: ¿cómo se obtiene una lista de archivos para proporcionar como argumentos a un comando determinado?
Con zsh
puedes ejecutar:
git add "**/*.java"
y todos sus *.java
archivos se agregarán de forma recursiva.
La respuesta de Sergey (no me dé crédito) está funcionando:
You can use git add [path]/\*.java
con un git reciente:
$git version
git version 1.7.3.4
Archivos para la prueba:
$find -name .git -prune -o -type f -print | sort
./dirA/dirA-1/dirA-1-1/file1.txt
./dirA/dirA-1/dirA-1-2/file2.html
./dirA/dirA-1/dirA-1-2/file3.txt
./dirA/dirA-1/file4.txt
./dirB/dirB-1/dirB-1-1/file5.html
./dirB/dirB-1/dirB-1-1/file6.txt
./file7.txt
Estado de Git:
$git status -s
?? dirA/
?? dirB/
?? file7.txt
Agregando *.txt:
$git add \*.txt
Estado actualizado:
$git status -s
A dirA/dirA-1/dirA-1-1/file1.txt
A dirA/dirA-1/dirA-1-2/file3.txt
A dirA/dirA-1/file4.txt
A dirB/dirB-1/dirB-1-1/file6.txt
A file7.txt
?? dirA/dirA-1/dirA-1-2/file2.html
?? dirB/dirB-1/dirB-1-1/file5.html