La commande git add [--all|-A]
semble être identique à git add .
. Est-ce correct? Si non, en quoi diffèrent-ils?
Cette réponse ne s'applique qu'à Git version 1.x. Pour Git version 2.x, voir les autres réponses.
Résumé:
git add -A
étapes toutes les modifications
git add .
met en scène les nouveaux fichiers et les modifications, sans suppressions
git add -u
met en place les modifications et les suppressions, sans nouveaux fichiers
Détail:
git add -A
est équivalent à git add .; git add -u
.
Le point important à propos de git add .
est qu’il examine l’arborescence de travail et ajoute tous ces chemins aux modifications échelonnées si elles sont modifiées ou si elles sont nouvelles et ne sont pas ignorées.
git add -u
examine tous les fichiers suivis déjà et met en forme les modifications apportées à ces fichiers si elles sont différentes ou si elles ont été supprimées. Il n'ajoute aucun nouveau fichier, il ne modifie que les modifications apportées aux fichiers déjà suivis.
git add -A
est un raccourci pratique pour faire les deux.
Vous pouvez tester les différences avec quelque chose comme ceci (notez que pour Git version 2.x, votre sortie pour git add .
git status
sera différente):
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
Voici un tableau pour une compréhension rapide:
Git Version 1.x :
Git Version 2.x :
Drapeaux longs:
git add -A
est équivalent à git add --all
git add -u
est équivalent à git add --update
Lectures supplémentaires:
Avec Git 2.0, _git add -A
_ est la valeur par défaut: _git add .
_ est égal à _git add -A .
_ .
_
git add <path>
_ est maintenant identique à "_git add -A <path>
_", de sorte que "_git add dir/
_" remarquera les chemins que vous avez supprimés du répertoire et enregistrera la suppression.
Dans les anciennes versions de Git, "_git add <path>
_" était utilisé pour ignorer les suppressions.Vous pouvez dire "_
git add --ignore-removal <path>
_" pour ajouter uniquement les chemins ajoutés ou modifiés dans _<path>
_, si vous le souhaitez vraiment.
_git add
_ est comme _git add :/
_ ( ajoutez tout du dossier de dépôt principal git ).
Notez que git 2.7 (nov. 2015) vous permettra d'ajouter un dossier nommé "_:
_"!
Voir commit 29abb (25 octobre 2015) par Junio C Hamano (gitster
) .
Notez que à partir de git 2.0 (Q1 ou Q2 2014) , lorsque vous parlez de git add .
(chemin actuel dans le (arbre de travail), vous devez également utiliser '_.
_' dans les autres commandes _git add
_.
Cela signifie:
"_
git add -A .
_" est équivalent à "_git add .; git add -u .
_"
(Notez le '_.
_' supplémentaire pour _git add -A
_ et _git add -u
_)
Parce que _git add -A
_ ou _git add -u
_ fonctionnerait (à partir de git 2.0 uniquement) sur l’arbre de travail entier , et pas uniquement sur l’actuel chemin.
Ces commandes fonctionneront sur l’ensemble de l’arborescence de Git 2.0 pour des raisons de cohérence avec "_
git commit -a
_" et d’autres commandes . Parce qu'il n'y aura aucun mécanisme pour que "_git add -u
_" se comporte comme si "_git add -u .
_", il est important pour ceux qui sont habitués à "_git add -u
_" (sans pathspec) de mettre à jour l'index uniquement. pour que les chemins du sous-répertoire courant commencent à entraîner leurs doigts à dire explicitement "_git add -u .
_" quand ils le veulent vraiment avant la sortie de Git 2.0.Un avertissement est émis lorsque ces commandes sont exécutées sans pathspec et lorsque des modifications locales sont effectuées en dehors du répertoire en cours , car le comportement dans Git 2.0 sera différent. de la version d'aujourd'hui dans une telle situation.
De instructions de Charles , après avoir testé ma compréhension proposée serait la suivante:
# For the next commit
$ git add . # Add only files created/modified to the index and not those deleted
$ git add -u # Add only files deleted/modified to the index and not those created
$ git add -A # Do both operations at once, add to all files to the index
Ce billet de blog pourrait également être utile pour comprendre dans quelle situation ces commandes peuvent être appliquées: Suppression des fichiers supprimés de votre répertoire de travail Git.
Une réponse rapide plus distillée:
git add -A
git add .
git add -u
Les choses ont changé avec Git 2.0:
-A
est maintenant la valeur par défaut--ignore-removal
git add -u
et git add -A
dans un sous-répertoire sans chemin sur la ligne de commande agissent sur toute l'arborescenceDonc, pour git 2, la réponse est:
git add .
et git add -A .
ajoutent des fichiers nouveaux/modifiés/supprimés dans le répertoire en coursgit add --ignore-removal .
ajoute des fichiers nouveaux/modifiés dans le répertoire en coursgit add -u .
ajoute des fichiers modifiés/supprimés dans le répertoire actuelDans Git 2.x:
Si vous vous trouvez directement dans le répertoire de travail , alors git add -A
et git add .
fonctionnent sans différence.
Si vous êtes dans n’importe quel sous-répertoire du répertoire de travail , git add -A
ajoutera tous les fichiers de l’ensemble répertoire de travail , et git add .
ajoutera des fichiers de votre répertoire actuel .
Et c'est tout.
Enfin, je pense que je comprends cela, merci beaucoup à vous tous. J'espère que cela apportera plus de clarté.
!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)
Les limiteurs peuvent être -u ou -A ou nil.
Pathspec peut être un chemin de fichier ou un point, '.' pour indiquer le répertoire en cours.
Connaissances de base importantes sur la façon dont git "ajoute".
Maintenant, étant donné cette connaissance, nous pouvons appliquer les réponses ci-dessus.
Les limiteurs sont les suivants.
Le pathspec est comme suit.
git add -A .
git add -u .
En conclusion, ma politique est la suivante:
git add .
est égal à git add -A .
ajoute des fichiers à indexer uniquement à partir des dossiers en cours et enfants.
git add -A
ajoute des fichiers à indexer à partir de tous les dossiers de l'arborescence de travail.
P.S .: les informations concernent Git 2.0.
L'option -A ajoute, modifie et supprime les entrées d'index pour correspondre à l'arborescence de travail.
Dans GIT 2, l’option -A
est maintenant définie par défaut.
Lorsqu'un .
est ajouté, ce qui limite la portée de la mise à jour au répertoire dans lequel vous vous trouvez, comme indiqué dans le documentation Git
Si aucun
<pathspec>
n'est donné lorsque l'option -A est utilisée, tous les fichiers de l'ensemble de l'arborescence de travail sont mis à jour (les anciennes versions de Git limitaient la mise à jour au répertoire actuel et à ses sous-répertoires).
Une chose que j’ajouterais est que si le mode --interactive
ou -p
est utilisé, alors git add se comportera comme si le drapeau update (-u
) était utilisé et n’ajoutait pas de nouveaux fichiers.
git add .
et git add -A
organisent tous les fichiers nouveaux, modifiés et supprimés dans les nouvelles versions de git
.
La différence est que git add -A
organise les fichiers dans les répertoires "upper, current et sub", qui appartiennent à votre référentiel git de travail. Mais faire un git add .
ne met en scène que les fichiers du répertoire courant et des sous-répertoires suivants (PAS les fichiers situés en dehors des répertoires supérieurs).
Voici un exemple:
/my-repo
.git/
subfolder/
nested-file.txt
rootfile.txt
Si votre répertoire de travail actuel est /my-repo
, et que vous faites rm rootfile.txt
, puis cd subfolder
, suivi de git add .
, il ne mettra PAS en scène le fichier supprimé. Mais faire git add -A
organisera certainement ce changement, peu importe où vous exécuterez la commande.
J'espère que cela efface la différence.