Je suis nouveau sur git et j'ai une question sur l'ajout de fichiers dans git. J'ai trouvé plusieurs questions sur la différence entre git add .
et git add -a
, git add --all
, git add -A
, etc. Mais je suis incapable de trouver un endroit qui explique quoi git add *
Est-ce que. J'ai même regardé le page de manuel de git add , mais cela n'a pas aidé. Je l'utilise à la place de git add .
et mon collègue m'a demandé pourquoi. Je n'ai pas eu de réponse. Je viens de toujours utiliser git add *
.
Sont git add .
et git add *
le même? Est-ce que l'un ajoute des fichiers modifiés à partir du répertoire actuel uniquement, tandis que l'autre ajoute des fichiers à partir du répertoire actuel et des sous-répertoires (de manière récursive)?
Un grand tableau répertorié sur l'une des autres questions de la pile montre la différence entre git add -A
git add .
et git add -u
, mais il n'a pas git add *
.
Remarque: je comprends ce que signifie utiliser l'astérisque comme caractère générique (ajouter tous les fichiers avec une extension donnée). Par exemple, git add *.html
ajouterait tous les fichiers qui ont un .html
extension (mais ignorez .css
, .js
, etc).
Merci pour l'aide!
add *
signifie que tous les fichiers du répertoire en cours sont ajoutés, à l’exception des fichiers dont le nom commence par un point. Ceci est la fonctionnalité de votre shell et Git ne reçoit jamais qu'une liste de fichiers.
add .
n'a pas de signification particulière dans votre shell et Git ajoute donc le répertoire entier de manière récursive, ce qui est presque identique, mais en incluant les fichiers dont le nom commence par un point.
*
ne fait pas partie de git - c'est un caractère générique interprété par le shell. *
s'étend à tous les fichiers du répertoire courant et est ensuite transmis à git, qui add
s tous. .
est le répertoire en cours et git add
ing il va l'ajouter et tous les fichiers qu'il contient.
L'utilisation du point .
Dans le shell signifie généralement "le répertoire actuel".
Lorsque vous utilisez l'astérisque *
Sur un shell, une fonctionnalité appelée file-globbing
Est utilisée. Par exemple. sur Bash la fonction glob()
fait exactement cela. La page de manuel de glob (man 7 glob
) Indique:
[~ # ~] description [~ # ~]
Long ago, in UNIX V6, there was a program /etc/glob that would expand wildcard patterns. Soon afterward this became a Shell built-in. These days there is also a library routine glob(3) that will perform this function for a user program.
Correspondance générique
A string is a wildcard pattern if it contains one of the characters '?', '*' or '['.
Globbing
Globbing is the operation that expands a wildcard pattern into the list of pathnames matching the pattern.
Cela signifie que lorsque vous transmettez des arguments à n’importe quel programme de la ligne de commande contenant '?'
, '*'
Ou '['
, Le premier déplacement étend le motif générique dans une liste de fichiers, puis les donne à fichiers comme argument du programme lui-même.
La différence de sens entre 'git add .'
Et 'git add *'
Est clairement décrite par Denis :
git add
S'attend à une liste de fichiers à ajouter. Dans l'exemple ci-dessus, le shell développe *
Ou .
Respectivement et donne le résultat en tant que paramètre à ajouter. Maintenant, la différence est que, avec git add .
, Git se développera dans le répertoire actuel, tandis que git add *
Déclenchera la suppression de fichier et l’élargira à tous les fichiers et répertoires qui ne commencent pas par un point.
Pour plus de clarté, je mets la réponse dans le tableau ci-dessous:
Notes complémentaires (inspirées du commentaire @ reka18):
Remarque 1. Les commandes git add -A
Et git add -u
Exécutées sans paramètres supplémentaires constitueraient un raffinement supplémentaire (indication de sous-répertoire ou de masque pour nom de fichier) fonctionne dans la plage de l’ensemble du répertoire de travail (même si nous exécutons la commande dans le sous-répertoire de travail du répertoire).
Note 2. Le .
Et le *
Sont respectivement le chemin du répertoire (répertoire actuel) et le caractère générique, qui clarifient le chemin de la commande. Par exemple, si la commande git add .
Ou git add *
Est exécutée dans un sous-répertoire d'un répertoire de travail, son action n'est utilisée que dans ce sous-répertoire et non dans le répertoire de travail complet.
Remarque 3. Les commandes git add -A
Et git add -u
Peuvent être affinées en ajoutant un chemin ou un masque pour les fichiers, pour Par exemple, git add -A app/controllers
ou git add -u app\styles\*
.