specific - Diferencia entre "git add-A" y "git add".
git add.vs git add* (10)
El comando git add [--all|-A] parece ser idéntico a git add . . ¿Es esto correcto? Si no, ¿en qué se diferencian?
Aquí está la tabla para una rápida comprensión:
Git Version 1.x :
Git Version 2.x :
Banderas largas:
-
git add -Aes equivalente agit add --all -
git add -ues equivalente agit add --update
Otras lecturas:
Con Git 2.0, git add -A es el valor predeterminado: git add . es igual a git add -A . .
git add <path>es lo mismo que "git add -A <path>" ahora, por lo que "git add dir/" notará las rutas que eliminó del directorio y registrará la eliminación.
En versiones anteriores de Git, "git add <path>" se utiliza para ignorar las eliminaciones.Puede decir "
git add --ignore-removal <path>" para agregar solo las rutas agregadas o modificadas en<path>, si realmente lo desea.
git add es como git add :/ ( agrega todo desde la carpeta superior de repositorios de git ).
Tenga en cuenta que git 2.7 (noviembre de 2015) le permitirá agregar una carpeta llamada " : "!
Ver commit 29abb33 (25 de octubre de 2015) por Junio C Hamano ( gitster ) .
Tenga en cuenta que al iniciar git 2.0 (Q1 o Q2 2014) , cuando se habla de git add . (ruta actual dentro del árbol de trabajo), debe usar '' . ''en los otros comandos de git add también.
Eso significa:
"
git add -A ." es equivalente a "git add .; git add -u ."git add .; git add -u .
(Note el extra '' . '' Para git add -A y git add -u )
Porque git add -A o git add -u funcionaría (iniciando git 2.0 solamente) en todo el árbol de trabajo , y no solo en la ruta actual.
Esos comandos operarán en todo el árbol en Git 2.0 por coherencia con "
git commit -a" y otros comandos . Debido a que no habrá ningún mecanismo para hacer que "git add -u" se comporte como si "git add -u .", es importante para aquellos que están acostumbrados a "git add -u" (sin pathspec) actualizando el índice solo para las rutas en el subdirectorio actual para comenzar a entrenar sus dedos para decir explícitamente "git add -u ." cuando lo dicen antes de que llegue Git 2.0.Se emite una advertencia cuando estos comandos se ejecutan sin un pathspec y cuando tiene cambios locales fuera del directorio actual , porque el comportamiento en Git 2.0 será diferente de la versión de hoy en tal situación.
En Git 2.x :
Si se encuentra directamente en el directorio de trabajo ,
git add -Aygit add .Trabajar sin diferencia.Si se encuentra en algún subdirectorio del directorio de trabajo ,
git add -Aagregará todos los archivos del directorio de trabajo completo, ygit add .agregará archivos de su directorio actual .
Y eso es todo.
Entonces, según las instrucciones anteriores de Charles, después de probar mi entendimiento propuesto sería el siguiente:
# For the next commit
$ git add . # add to index only files created/modified and not those deleted
$ git add -u # add to index only files deleted/modified and not those created
$ git add -A # do both operation at once, add to index all files
Este enlace también puede ser útil para comprender en qué situación se pueden aplicar esos comandos: Eliminar archivos eliminados de su directorio de trabajo de Git .
Finalmente creo que entiendo esto, muchas gracias a todos. Espero que esto pueda agregar algo más de claridad.
!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)
Los limitadores pueden ser -u o -A o nil.
Pathspec puede ser un filepath o punto, ''.'' para indicar el directorio actual.
Conocimiento de fondo importante sobre cómo git ''agrega''.
- Los archivos invisibles, los prefijados con un punto, (archivos de puntos) nunca son reconocidos automáticamente por Git. Ni siquiera están listados como ''sin seguimiento''.
- Las carpetas vacías nunca son agregadas por git. Ni siquiera están listados como ''sin seguimiento''. (Una solución alternativa es agregar un archivo en blanco, posiblemente invisible, a los archivos rastreados).
- El estado de Git no mostrará información de subcarpetas, es decir, archivos sin seguimiento, a menos que se rastree al menos un archivo en esa subcarpeta. Antes de ese tiempo, git considera que toda la carpeta está fuera del alcance, a la ''vacía''. Está vacío de elementos rastreados.
- Especificando una especificación de archivo = ''.'' (punto), o el directorio actual, no es recursivo a menos que también se especifique -A. Punto se refiere estrictamente al directorio actual, omite las rutas encontradas arriba y abajo.
Ahora, dado ese conocimiento, podemos aplicar las respuestas anteriores.
Los limitadores son los siguientes.
- -u = --update = subconjunto de archivos rastreados => Agregar = No; Cambio = Sí; Eliminar = Sí. => iff el artículo es rastreado.
- -A = --todo (no tal -a, que da error de sintaxis) = superconjunto de todos los archivos no rastreados / rastreados, a menos que en Git <2.0, en donde si se da la especificación de archivo de puntos, solo se considera esa carpeta en particular. => Si se reconoce el elemento, git add -A lo encontrará y lo agregará.
El pathspec es el siguiente.
- En Git <2.0, para los dos limitadores (actualizar y todos), el nuevo valor predeterminado es operar en todo el árbol de trabajo, en lugar de la ruta actual (git <= 1.9),
- Sin embargo, en v2.0, la operación se puede limitar a la ruta actual: simplemente agregue el sufijo de punto explícito (que también es válido en Git <= 1.9);
git add -A .
git add -u .
En conclusión, mi política es;
- 1.Asegúrese de que cualquier archivo / archivo que se agregará se contabiliza en el estado de git.
- 1A. Si falta algún elemento, debido a archivos / carpetas invisibles, agréguelos por separado.
- 2. Tener un buen gitignore para que normalmente solo los archivos de interés estén sin seguimiento y / o no se reconozcan.
- 3. Desde el nivel superior del repositorio, "git add -A" para agregar todos los elementos. Esto funciona en todas las versiones de git.
- 4.Retire los elementos deseados del índice si lo desea.
- 6. Si hay un error grande, haga ''git reset'' para borrar el índice por completo.
La opción -A agrega, modifica y elimina entradas de índice para que coincidan con el árbol de trabajo.
En GIT 2, la opción -A ahora es predeterminada.
Cuando un . se agrega que limita el alcance de la actualización al directorio en el que se encuentra actualmente, según la documentación de Git
Si no se proporciona
<pathspec>cuando se usa la opción -A, se actualizan todos los archivos en todo el árbol de trabajo (las versiones anteriores de Git se utilizan para limitar la actualización al directorio actual y sus subdirectorios).
Una cosa que agregaría es que si se usa el modo --interactive o -p , git add se comportará como si se usara el indicador de actualización ( -u ) y no se agregaran nuevos archivos
Tarde a la fiesta, pero esta pregunta también merece una respuesta rápida más detallada.
git add -A
¿Ambos abajo (igual que git add --all )
git add .
Etapas nuevos + archivos modificados
git add -u
Etapas modificadas + archivos borrados
Las cosas cambiaron con Git 2.0:
-
-Aes ahora el predeterminado - el antiguo comportamiento ya está disponible con
--ignore-removal -
git add -uygit add -Aen un subdirectorio sin rutas en la línea de comandos operan en todo el árbol
Así que para git 2 la respuesta es:
-
git add .ygit add -A .agregar archivos nuevos / modificados / eliminados en el directorio actual -
git add --ignore-removal .agrega archivos nuevos / modificados en el directorio actual -
git add -u .Agrega archivos modificados / eliminados en el directorio actual - sin el punto, agregue todos los archivos en el proyecto independientemente del directorio actual
git add . es igual a git add -A . agrega archivos al índice solo desde carpetas actuales y secundarias.
git add -A agrega archivos al índice de todas las carpetas en el árbol de trabajo.
PS: la información se relaciona con Git 2.0.
Esta respuesta solo se aplica a la versión 1.x de Git . Para la versión 2.x de Git, vea otras respuestas.
Resumen:
git add -Aescalona todos los cambiosgit add .Etapas de nuevos archivos y modificaciones, sin eliminaciones.Modificaciones y eliminaciones de
git add -ustage, sin archivos nuevos.
Detalle:
git add -A es equivalente a git add .; git add -u git add .; git add -u .
El punto importante sobre git add . es que mira el árbol de trabajo y agrega todas esas rutas a los cambios por etapas si se cambian o son nuevas y no se ignoran, no realiza ninguna acción ''rm''.
git add -u examina todos los archivos ya rastreados y organiza los cambios en esos archivos si son diferentes o si se eliminaron. No agrega ningún archivo nuevo, solo realiza cambios en los archivos ya rastreados.
git add -A es un atajo útil para hacer ambas cosas.
Puedes probar las diferencias con algo como esto (ten en cuenta que para Git versión 2.x tu salida para git add . Git git status será diferente):
git init
echo Change me > change-me
echo Delete me > delete-me
git add change-me delete-me
git commit -m initial
echo OK >> change-me
rm delete-me
echo Add me > add-me
git status
# Changed but not updated:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
git add .
git status
# Changes to be committed:
# new file: add-me
# modified: change-me
# Changed but not updated:
# deleted: delete-me
git reset
git add -u
git status
# Changes to be committed:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
git reset
git add -A
git status
# Changes to be committed:
# new file: add-me
# modified: change-me
# deleted: delete-me