Je suis nouveau dans git et j'ai une question sur l'ajout de fichiers dans git. J'ai trouvé plusieurs questions stackoverflow sur la différence entre git add .
et git add -a
, git add --all
, git add -A
, etc. Mais j'ai été incapable de trouver un endroit qui explique ce git add *
fait. J'ai même regardé la page de manuel de git add , mais cela n'a pas aidé. Je l'ai utilisé à la place de git add .
et mon collègue m'a demandé pourquoi. Je n'avais pas de réponse. J'ai juste toujours utilisé git add *
.
Sont git add .
et git add *
les mêmes? Est-ce que l'un ajoute uniquement les fichiers modifiés du répertoire courant, tandis que l'autre ajoute des fichiers du répertoire courant et des sous-répertoires (récursivement)?
Il existe un excellent graphique répertorié sur l'une des autres questions de la pile qui montre la différence entre git add -A
git add .
et git add -u
, mais ce n'est pas le cas 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 une .html
extension (mais ne tiennent pas compte .css
, .js
etc.).
Merci pour l'aide!
la source
git add .
nouveau, et il a mis en scène un fichier supprimé sans problème, contrairementX
à ce que suggère cette ligne.Réponses:
add *
signifie ajouter tous les fichiers dans le répertoire courant, à l'exception des fichiers dont le nom commence par un point. Il s'agit de votre fonctionnalité shell et Git ne reçoit jamais qu'une liste de fichiers.add .
n'a pas de signification particulière dans votre shell, et donc Git ajoute le répertoire entier de manière récursive, ce qui est presque le même, mais y compris les fichiers dont les noms commencent par un point.la source
git add .
ajoute donc tous les fichiers, dossiers et sous-dossiers, y compris .gitignore et tout ce qui commence par un point, tandisgit add *
que ajouterait tous les fichiers, dossiers et sous-dossiers, sauf ceux commençant par un point? Est-ce exact?git add *
ajouterait toujours des fichiers commençant par un point s'ils se trouvent dans un sous-répertoire.git add .
respecte également .gitignore, alors que généreragit add *
une erreur si des fichiers non-point sont gitignored. Bien mieux utilisergit add .
quegit add *
.*
. Dans ce cas, Git trouvera des fichiers dot.*
pour le protéger du shell. Ce n'est pas une question de partie cachée, c'est juste que les règles compilées de Git diffèrent.*
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 n'est ensuite passé à git, quiadd
les tous..
est le répertoire courant lui-même, etgit add
il l'ajoutera ainsi que tous les fichiers qu'il contient.la source
*
évite les fichiers cachés (c'est-à-dire les fichiers dont le nom commence par a.
). Dans tous les cas, si vous n'ajoutez pas de fichiers spécifiques, j'utiliserais simplementgit add -u
(ougit add -A
si vous créez de nouveaux fichiers).Utiliser le point
.
dans le shell signifie généralement "le répertoire courant".Lorsque vous utilisez l'astérisque
*
sur un shell, une fonction appeléefile-globbing
est utilisée. Par exemple, sur bash, la fonctionglob()
fait exactement cela. La page de manuel de glob (man 7 glob
) indique:Cela signifie que lorsque vous transmettez des arguments à n'importe quel programme sur la ligne de commande qui contient
'?'
,'*'
ou'['
, le premier globbing développe le modèle générique dans une liste de fichiers, puis donne ces fichiers comme argument au 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 à ce qu'une liste de fichiers soit ajoutée. Dans l'exemple ci-dessus, le shell se développe*
ou.
respectivement et donne le résultat en tant que paramètre à git add. Maintenant, la différence est qu'avecgit add .
git s'étendra vers le répertoire courant alors quegit add *
déclenche la globalisation des fichiers et que cela s'étend à tous les fichiers et répertoires qui ne commencent pas par un point.la source
Pour plus de clarté, j'ai mis la réponse dans le tableau ci-dessous:
Notes supplémentaires (inspirées du commentaire @ reka18):
Remarque 1.
git add -A
et lesgit add -u
commandes exécutées sans paramètres supplémentaires seraient un raffinement supplémentaire (sous-répertoire ou indication de masque pour le nom de fichier) dans la plage de tout le répertoire de travail (également si nous exécutons la commande dans le sous-répertoire de travail du répertoire).Remarque 2. Les
.
et*
sont respectivement le chemin du répertoire (répertoire courant) et le caractère générique, qui clarifient le chemin de la commande. Par exemple, si la commandegit add .
ougit add *
est exécutée dans un sous-répertoire d'un répertoire de travail, alors leur action n'est utilisée que dans ce sous-répertoire, pas dans tout le répertoire de travail.Remarque 3. Les commandes
git add -A
etgit add -u
peuvent être affinées davantage en ajoutant un chemin ou un masque pour les fichiers, par exemple,git add -A app/controllers
ougit add -u app\styles\*
.la source
git add -A
etgit add .
sont identiques?git add -A
s'applique à tout le répertoire de travail etgit add .
toujours au répertoire courant).git add -A
(--all) Ajoute tout, de sorte que tout ce qui se trouve dans votre dossier sur le disque soit représenté dans la zone de préparationgit add .
Met tout en scène, mais ne supprime pas les fichiers qui ont été supprimés du disquegit add *
Met tout en scène, mais pas les fichiers qui commencent par un point et ne supprime pas les fichiers qui ont été supprimés du disquegit add -u
(--update) Étapes uniquement les fichiers modifiés, supprime les fichiers qui ont été supprimés du disque, n'ajoute pas de nouveauxgit add <file name 1> <file name 2>
Ajoute uniquement certains fichiersla source