Soy nuevo en git y tengo una pregunta sobre cómo agregar archivos en git. He encontrado varias preguntas sobre stackoverflow la diferencia entre git add .
e git add -a
, git add --all
, git add -A
, etc, pero he sido incapaz de encontrar un lugar que explica lo que git add *
hace. Incluso he mirado la página de manual de git add , pero no ayudó. Lo he estado usando en lugar de git add .
y mi compañero de trabajo me preguntó por qué. No tuve una respuesta. Siempre lo he usado git add *
.
¿Son git add .
y git add *
lo mismo? ¿Uno agrega archivos cambiados desde el directorio actual, mientras que el otro agrega archivos desde el directorio actual y subdirectorios (recursivamente)?
Hay una gran tabla en una de las otras preguntas de la pila que muestra la diferencia entre git add -A
git add .
y git add -u
, pero no tiene git add *
.
Nota: Entiendo lo que significa usar el asterisco como comodín (agregar todos los archivos con una extensión determinada). Por ejemplo, git add *.html
sería añadir todos los archivos que tienen una .html
extensión (pero ignoran .css
, .js
, etc).
¡Gracias por la ayuda!
fuente
git add .
nuevamente, y organizó un archivo eliminado sin problema, a diferencia de loX
que sugeriría en esa fila.Respuestas:
add *
significa agregar todos los archivos en el directorio actual, excepto los archivos cuyo nombre comienza con un punto. Esta es su funcionalidad de shell y Git solo recibe una lista de archivos.add .
no tiene un significado especial en su shell y, por lo tanto, Git agrega todo el directorio de forma recursiva, que es casi lo mismo, pero incluye archivos cuyos nombres comienzan con un punto.fuente
git add .
agrega todos los archivos, carpetas y subcarpetas, incluidos .gitignore y cualquier otra cosa que comience con un punto, mientrasgit add *
que agregaría cualquier archivo, carpeta y subcarpeta, excepto aquellos que comienzan con un punto. ¿Es eso exacto?git add *
aún agregaría archivos que comienzan con un punto si están en un subdirectorio.git add .
también respeta .gitignore, mientrasgit add *
que arrojará un error si se ignoran los archivos que no sean puntos. Mucho mejor de usargit add .
quegit add *
.*
. En este caso, Git encontrará archivos de puntos.*
para protegerlo del shell. No se trata de lo oculto, es solo que las reglas compiladas de Git difieren.*
no es parte de git, es un comodín interpretado por el shell.*
se expande a todos los archivos en el directorio actual, y solo se pasa a git, queadd
es todos ellos..
es el directorio actual en sí, egit add
ing lo agregará junto con todos los archivos que contiene.fuente
*
evita archivos ocultos (es decir, archivos cuyo nombre comienza con a.
). En cualquier caso, si no está agregando archivos específicos, simplemente los usaríagit add -u
(ogit add -A
si está creando nuevos archivos).Usar el punto
.
en el shell generalmente significa "el directorio actual".Cuando utiliza el asterisco
*
en un shell,file-globbing
se utiliza una función llamada . Por ejemplo, en bash, la funciónglob()
está haciendo exactamente eso. La página de manual de glob (man 7 glob
) establece:Eso significa que cuando pasa argumentos a cualquier programa en la línea de comandos que contiene
'?'
,'*'
o'['
, primero, el globbing expande el patrón comodín en una lista de archivos y luego da estos archivos como un argumento para el programa mismo.Denis describe claramente la diferencia de significado entre
'git add .'
y :'git add *'
git add
espera que se agregue una lista de archivos. En el ejemplo anterior, el shell se expande*
o.
da respectivamente el resultado como un parámetro para git add. Ahora la diferencia es que congit add .
git se expandirá al directorio actual, mientras quegit add *
activa el bloqueo de archivos y se expande a todos los archivos y directorios que no comienzan con un punto.fuente
Para mayor claridad, pongo la respuesta en la tabla a continuación:
Notas adicionales (inspiradas en el comentario @ reka18):
Nota 1.
git add -A
y losgit add -u
comandos ejecutados sin parámetros adicionales serían refinamiento adicional (subdirectorio o indicación de máscara para el nombre del archivo) en el rango de todo el directorio de trabajo (también si ejecutamos el comando en el subdirectorio de trabajo del directorio).Nota 2. Los
.
y*
son, respectivamente, la ruta del directorio (directorio actual) y el comodín, que aclaran la ruta del comando. Por ejemplo, si el comandogit add .
ogit add *
se ejecuta en algún subdirectorio de un directorio de trabajo, entonces su acción solo se usa dentro de este subdirectorio, no en todo el directorio de trabajo.Nota 3. Los comandos
git add -A
ygit add -u
se pueden refinar aún más agregando una ruta o máscara para archivos, por ejemplo,git add -A app/controllers
ogit add -u app\styles\*
.fuente
git add -A
ygit add .
son idénticos?git add -A
aplica a todo el directorio de trabajo ygit add .
siempre al directorio actual).git add -A
(--todos) Agrega todo, para que todo en su carpeta en el disco esté representado en el área de preparacióngit add .
Organiza todo, pero no elimina los archivos que se han eliminado del discogit add *
Organiza todo, pero no los archivos que comienzan con un punto y no elimina los archivos que se han eliminado del discogit add -u
(--update) Etapas solo archivos modificados, elimina archivos que se han eliminado del disco, no agrega nuevosgit add <file name 1> <file name 2>
Agrega solo ciertos archivosfuente