Agregar solo archivos sin seguimiento

168

Uno de los comandos que encuentro increíblemente útil en Git es git add -ulanzar todo menos los archivos sin seguimiento al índice. ¿Hay una inversa de eso? En los últimos meses, a menudo me he encontrado en una posición en la que he agregado interactivamente algunas actualizaciones al índice y quiero agregar todos los archivos no rastreados a ese índice antes de comprometerme.

¿Hay alguna manera de agregar solo los archivos no rastreados al índice sin identificarlos individualmente? No veo nada obvio en los documentos de ayuda, pero ¿tal vez me lo estoy perdiendo?

Gracias.

Rob Wilkerson
fuente
1
Con respecto a "arrojar todo menos los archivos no rastreados al índice", .gitignoreestá específicamente diseñado para ese propósito, no git add -u.
Pacerier
Además, ¿está solicitando agregar los archivos no rastreados mientras elimina todos los rastreados actualmente, o está pidiendo agregar los archivos no rastreados encima de los rastreados actualmente (haciendo todo rastreado)?
Pacerier

Respuestas:

236

Es fácil con git add -i. Escriba a(para "agregar sin seguimiento"), luego *(para "todos"), luego q(para salir) y listo.

Para hacerlo con un solo comando: echo -e "a\n*\nq\n"|git add -i

Estera
fuente
44
Esperaba que hubiera algo menos, bueno, interactivo, pero ciertamente es mejor que archivo por archivo. :-)
Rob Wilkerson
34
echo -e "a\n*\nq\n"|git add -i
Mat
@ Mat, gracias, así es el comando completo ----> git add -ia * q ??
BKSpurgeon
Argument list too long... ¡tan cerca!
Simeon
1
Para mí con git 2.21.0 IS fue git add -iluego 4añadir sin seguimiento después *de todo, entonces qdejar de fumar
Harry B
36

git ls-files -o --exclude-standard proporciona archivos sin seguimiento, por lo que puede hacer algo como a continuación (o agregar un alias):

git add $(git ls-files -o --exclude-standard)
manojlds
fuente
1
alias gau = "git ls-files -o --exclude-standard | xargs -i git add '{}'" funciona para mí
Stephan
git ls-files --help es una lectura bastante útil: -o, --others Show other (i.e. untracked) files in the output
Joshua Kunzmann
15

No es exactamente lo que estás buscando, pero esto me ha resultado bastante útil:

git add -AN

Agregará todos los archivos al índice, pero sin su contenido. Los archivos que no fueron rastreados ahora se comportan como si fueran rastreados. Su contenido se mostrará en git diff, y puede agregar luego interactivamente con git add -p.

Hasen
fuente
Esto es exactamente lo que estaba buscando: permite git commit -precorrer nuevos archivos también.
nitsujri
11

Puede agregar esto a su archivo ~ / .gitconfig:

[alias]
    add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"

Luego, desde la línea de comandos, simplemente ejecute:

git add-untracked
joshuadavey
fuente
Me gusta este enfoque, pero no maneja espacios en los nombres de archivo.
Paul Coccoli
9

La gente ha sugerido canalizar la salida de git ls-filesto, git addpero esto fallará en los casos en que haya nombres de archivo que contengan espacios en blanco o caracteres globales como *.

La forma segura sería usar:

git ls-files -o --exclude-standard -z | xargs -0 git add

where -zle dice a git que use \0terminadores de línea y -0le dice a xargs lo mismo. La única desventaja de este enfoque es que la -0opción no es estándar, por lo que solo algunas versiones lo xargsadmiten.

Tom Fenech
fuente
6

git ls-filesenumera los archivos en el directorio actual. Si desea enumerar archivos sin seguimiento desde cualquier parte del árbol, esto podría funcionar mejor:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel)

Para agregar todos los archivos sin seguimiento en el árbol:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add
pborenstein
fuente
6

Intenté esto y funcionó:

git stash && git add . && git stash pop

git stashsolo colocará todos los archivos rastreados modificados en una pila separada, luego los archivos sobrantes son archivos no rastreados. Luego, al hacer, git add .se organizarán todos los archivos sin seguimiento, según sea necesario. Finalmente, para recuperar todos los archivos modificados de la pila haciendogit stash pop

Rohan Khude
fuente
0

Si tiene miles de archivos sin seguimiento (ugh, no pregunte) git add -i, no funcionará al agregarlos *. Obtendrá un error que indica Argument list too long.

Si también está en Windows (no pregunte # 2 :-) y necesite usar PowerShell para agregar todos los archivos sin seguimiento, puede usar este comando:

git ls-files -o --exclude-standard | select | foreach { git add $_ }
Simeon
fuente
Una versión más condensada:git ls-files -o --exclude-standard | % { git add $_ }
marckassay
0

Muchos buenos consejos aquí, pero dentro de Powershell no pude hacerlo funcionar.

Soy un desarrollador de .NET y todavía utilizamos principalmente el sistema operativo Windows, ya que no hemos utilizado tanto .Net core y multiplataforma, por lo que mi uso diario con Git es en un entorno de Windows, donde el shell utilizado es más a menudo Powershell y no Git bash.

Se puede seguir el siguiente procedimiento para crear una función con alias para agregar archivos sin seguimiento en un repositorio de Git.

Dentro del archivo $ profile de Powershell (en caso de que falte, puede ejecutar: New-Item $ Profile)

Bloc de notas $ Perfil

Ahora agregue este método Powershell:

function AddUntracked-Git() {
 &git ls-files -o --exclude-standard | select | foreach { git add $_ }
}

Guarde el archivo $ profile y vuelva a cargarlo en Powershell. Luego, vuelva a cargar su archivo $ profile con:. $ perfil

Esto es similar al comando de origen en entornos * nix en mi humilde opinión.

Entonces, la próxima vez que lo haga, si es un desarrollador que usa Powershell en Windows contra el repositorio de Git y solo desea incluir archivos sin seguimiento, puede ejecutar:

AddUntracked-Git

Esto sigue la convención de Powershell donde tienes sustantivos verbales.

Tore Aurstad
fuente
0

git add. (agregue todos los archivos en este directorio)

git add -all (agrega todos los archivos en todos los directorios)

git add -N puede ser útil para enumerar cuáles para más adelante ...

atreyHazelHispanic
fuente
git add -uagregará archivos modificados sin
seguimiento
-3

Para agregar todos los archivos sin seguimiento, el comando git es

git add -A

Además, si desea obtener más detalles sobre varias opciones disponibles, puede escribir el comando

git add -i

en lugar del primer comando, con esto obtendrá más opciones, incluida la opción de agregar todos los archivos no rastreados como se muestra a continuación:

$ git add -i advertencia: LF será reemplazado por CRLF en README.txt. El archivo tendrá sus finales de línea originales en su directorio de trabajo. advertencia: LF será reemplazado por CRLF en package.json.

* Comandos * 1: estado 2: actualización 3: revertir 4: agregar sin seguimiento 5: parche 6: diff 7: salir 8: ayuda Qué pasa ahora> a

L.Sidhu
fuente