tag - tipos de etiquetas en git
Agregar solo archivos sin seguimiento (9)
Es fácil con git add -i
. Escriba a
(para "agregar sin seguimiento"), luego *
(para "todo"), luego q
(para salir) y listo.
Para hacerlo con un solo comando: echo -e "a/n*/nq/n"|git add -i
Uno de los comandos que me resulta increíblemente útil en Git es git add -u
para arrojar todo en el índice, excepto los archivos sin seguimiento. ¿Hay un inverso de eso? En los últimos meses, a menudo me he encontrado en una posición en la que he agregado de forma interactiva algunas actualizaciones al índice y quiero agregar todos los archivos sin seguimiento a ese índice antes de comprometerme.
¿Hay alguna forma de agregar solo los archivos sin seguimiento al índice sin identificarlos individualmente? No veo nada obvio en los documentos de ayuda, pero tal vez me lo estoy perdiendo.
Gracias.
Intenté esto y funcionó:
git stash && git add . && git stash pop
git stash
solo colocará todos los archivos modificados rastreados en una pila separada, luego los archivos restantes serán archivos sin seguimiento. Luego haciendo git add .
pondrá en escena todos los archivos no rastreados, según sea necesario. Eventualmente, para obtener un conjunto de todos los archivos modificados de stack by git stash pop
Las personas han sugerido conectar el resultado de git ls-files
a git add
pero esto va a fallar en los casos en que haya nombres de archivo que contengan espacios en blanco o caracteres glob como *
.
La manera más segura sería usar:
git ls-files -o --exclude-standard -z | xargs -0 git add
donde -z
le dice a git que use /0
terminadores de línea y -0
le dice a xargs lo mismo. La única desventaja de este enfoque es que la opción -0
no es estándar, por lo que solo algunas versiones de xargs
admiten.
No es exactamente lo que estás buscando, pero he encontrado esto bastante útil:
git add -AN
Agregará todos los archivos al índice, pero sin su contenido. Los archivos que no se rastrearon ahora se comportan como si hubieran sido rastreados. Su contenido se mostrará en git diff
, y luego podrá agregarlo de manera interactiva con git add -p
.
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 comandos
git add -i
en lugar del primer comando, con esto obtendrás más opciones, incluida la opción de agregar todos los archivos sin seguimiento 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: diferencia 7: salir 8: ayuda ¿Qué pasa ahora?
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, solo ejecuta:
git add-untracked
Si tiene miles de archivos sin seguir (ugh, no pregunte), entonces git add -i
no funcionará al agregar *
. Obtendrá un error que indica que la 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 $_ }
git ls-files -o --exclude-standard
proporciona archivos sin seguimiento, por lo que puede hacer algo como a continuación (o agregarle un alias):
git add $(git ls-files -o --exclude-standard)
git ls-files
lista los archivos en el directorio actual. Si desea listar archivos sin seguimiento desde cualquier lugar 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