Question Différence entre "git add -A" et "git add".


La commande git add [--all|-A] semble être identique à git add .. Est-ce correct? Sinon, comment sont-ils différents?


2390
2018-02-21 06:51


origine


Réponses:


Pour Git version 2.x, voir aussi les réponses ci-dessous.


Résumé:

  • git add -A étapes Tout

  • git add . étapes nouvelles et modifiées, sans supprimé

  • git add -u étapes modifiées et supprimées, sans nouveau


Détail:

git add -A est équivalent à git add .; git add -u.

Le point important à propos de git add . est qu'il regarde l'arbre de travail et ajoute tous ces chemins aux changements par étapes s'ils sont changés ou sont nouveaux et non ignorés, il n'organise aucune action 'rm'.

git add -u regarde tous les déjà suivi les fichiers et met en scène les modifications apportées à ces fichiers s'ils sont différents ou s'ils ont été supprimés. Il n'ajoute aucun nouveau fichier, il ne fait que modifier les 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 ça (notez que pour Git version 2.x votre sortie pour git add .  git status  volonté sois différent):

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

3655
2018-02-21 09:00



Voici un tableau pour une compréhension rapide:

Git Version 1.x: enter image description here

Git Version 2.x: enter image description here

Drapeaux de forme longue:

  • git add -A est équivalent à git add --all
  • git add -u est équivalent à git add --update

En lire plus:


646
2017-09-25 12:45



Avec Git 2.0, git add -A est par défaut: git add . équivaut à git add -A ..

git add <path> est le même que "git add -A <path>"maintenant, pour que   "git add dir/"notera les chemins que vous avez supprimés du répertoire et   enregistrer le retrait.
  Dans les anciennes versions de Git, "git add <path>"utilisé pour ignorer les suppressions.

Tu peux dire "git add --ignore-removal <path>" à   ajouter uniquement des chemins ajoutés ou modifiés dans <path>, si tu veux vraiment.

git add est comme git add :/ (ajouter tout de haut dossier repo git).
Notez que git 2.7 (Nov. 2015) vous permettra d'ajouter un dossier nommé ":"!
Voir commettre 29abb33 (25 octobre 2015) par Junio ​​C Hamano (gitster).


Notez que démarrage git 2.0 (Q1 ou Q2 2014), quand on parle de git add . (chemin actuel dans l'arbre de travail), vous devez utiliser '.' dans l'autre git add commandes aussi bien.

Cela signifie:

"git add -A ." est équivalent à "git add .; git add -u ."

(Notez le supplément '.' pour git add -A et git add -u)

Car git add -A ou git add -u fonctionnerait (à partir de git 2.0 seulement) sur le arbre de travail entier, et pas seulement sur le chemin actuel.

Ces commandes seront opérer sur l'arbre entier dans Git 2.0 pour la cohérence avec "git commit -a"et d'autres commandes.   Parce qu'il n'y aura pas de mécanisme à faire "git add -u"se comporter comme si"git add -u .", c'est important pour ceux qui sont habitués"git add -u"(sans pathspec) mise à jour de l'index uniquement pour les chemins dans le sous-répertoire en cours pour commencer à entraîner leurs doigts à dire explicitement"git add -u ."quand ils le pensent avant que Git 2.0 arrive.

Un avertissement est émis lorsque ces commandes sont exécutées sans pathspec et lorsque vous avez des modifications locales en dehors du répertoire en cours, parce que le comportement de Git 2.0 sera différent   de la version d'aujourd'hui dans une telle situation.


135
2018-04-23 06:32



Donc, à partir des instructions de Charles ci-dessus, après avoir testé mon projet de compréhension serait comme suit:

# For the next commit
$ git add .   # add to index only files created/modified and not those deleted
$ git add -u  # add to index only files deleted/modified and not those created
$ git add -A  # do both operation at once, add to index all files

Ce lien peut également être utile pour comprendre dans quelle situation ces commandes peuvent être appliquées: Suppression de fichiers supprimés de votre répertoire de travail Git.


126
2018-06-01 09:27



Tard à la fête mais cette question mérite également une réponse rapide plus distillée.

git add -A 

Est-ce que les deux ci-dessous (même que git ajouter --all)

git add . 

Stages nouveaux + fichiers modifiés

git add -u 

Stages modifiés + fichiers supprimés


26
2018-04-06 12:56



Les choses ont changé avec Git 2.0:

  • -A est maintenant le défaut
  • l'ancien comportement est maintenant disponible avec --ignore-removal
  • git add -u et git add -A dans un sous-répertoire sans chemins sur la ligne de commande opérer sur l'arbre entier

Donc, pour git 2, la réponse est:

  • git add . et git add -A . ajouter des fichiers nouveaux / modifiés / supprimés dans le répertoire en cours
  • git add --ignore-removal . ajoute des fichiers nouveaux / modifiés dans le répertoire courant
  • git add -u . ajoute des fichiers modifiés / supprimés dans le répertoire courant
  • sans le point, ajoutez tous les fichiers du projet quel que soit le répertoire en cours

23
2017-10-13 15:29



Enfin je pense que je reçois ceci, merci beaucoup à vous tous. J'espère que cela pourrait ajouter plus de clarté.

!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)

Les limites peuvent être -u ou -A ou nulles.

Pathspec peut être un chemin de fichier ou un point, '.' pour indiquer le répertoire actuel.

Connaissances de base importantes sur la façon dont git «ajoute».

  • Les fichiers invisibles, ceux précédés d'un point, (points) ne sont jamais automatiquement reconnus par Git. Ils ne sont même jamais listés comme «non marqués».
  • Les dossiers vides ne sont jamais ajoutés par git. Ils ne sont même jamais listés comme «non marqués». (Une solution de contournement consiste à ajouter un fichier vide, éventuellement invisible, aux fichiers suivis.)
  • L'état Git n'affiche pas les informations du sous-dossier, c'est-à-dire les fichiers non suivis, sauf si au moins un fichier de ce sous-dossier est suivi. Avant cela, git considère que le dossier entier est hors de portée, à la manière d'un 'vide'. Il est vide d'éléments suivis.
  • Spécifier un fichier de fichiers = '.' (point), ou le répertoire courant, n'est pas récursif sauf si -A est également spécifié. Dot se réfère strictement au répertoire en cours - il omet les chemins trouvés ci-dessus et ci-dessous.

Maintenant, étant donné cette connaissance, nous pouvons appliquer les réponses ci-dessus.

Les limiteurs sont les suivants.

  • -u = --update = sous-ensemble aux fichiers suivis => Add = No; Changer = Oui Supprimer = Oui. => si l'objet est suivi.
  • -A = --all (pas de -a, qui donne une erreur de syntaxe) = surensemble de tous les fichiers non suivis / suivis, sauf dans Git <2.0, où si le point de fichier est donné, alors seulement ce dossier particulier est considéré. => si l'objet est reconnu, git add -A le trouvera et l'ajoutera.

La pathspec est la suivante.

  • Dans Git <2.0, pour les deux limiteurs (update et all), la nouvelle valeur par défaut est de fonctionner sur l'arbre de travail entier, au lieu du chemin courant (git <= 1.9),
  • Cependant, dans v2.0, l'opération peut être limitée au chemin courant: il suffit d'ajouter le suffixe de point explicite (qui est également valide dans Git <= 1.9);

git add -A .

git add -u .

En conclusion, ma politique est;

  • 1.S'assurer que tous les fichiers à ajouter sont comptabilisés dans l'état git.
  • 1A.Si des éléments sont manquants, en raison de fichiers / dossiers invisibles, ajoutez-les séparément.
  • 2. Ayez un bon gitignore afin que normalement seuls les fichiers d'intérêt ne soient pas suivis et / ou ne soient pas reconnus.
  • 3. Du niveau supérieur du dépôt, "git add -A" pour ajouter tous les éléments. Cela fonctionne dans toutes les versions de git.
  • 4.Retirez les éléments souhaités de l'index si vous le souhaitez.
  • 6.S'il y a un gros bug, faites 'git reset' pour effacer complètement l'index.

11
2018-04-06 02:03