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 *.htmlsería añadir todos los archivos que tienen una .htmlextensión (pero ignoran .css, .js, etc).
¡Gracias por la ayuda!
fuente

git add .nuevamente, y organizó un archivo eliminado sin problema, a diferencia de loXque 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, queaddes todos ellos..es el directorio actual en sí, egit adding 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 -Asi está creando nuevos archivos).Usar el punto
.en el shell generalmente significa "el directorio actual".Cuando utiliza el asterisco
*en un shell,file-globbingse 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 addespera 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 -Ay losgit add -ucomandos 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 -Aygit add -use pueden refinar aún más agregando una ruta o máscara para archivos, por ejemplo,git add -A app/controllersogit add -u app\styles\*.fuente
git add -Aygit add .son idénticos?git add -Aaplica 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