Différence entre "git add" et "git add."

la commande git add [--all|-A] semble identique à git add . . Est-ce correct? Si non, en quoi diffèrent-elles?

2436
demandé sur CharlesB 2009-02-21 09:51:06
la source

9 ответов

cette réponse ne s'applique qu'à Git version 1.x . Pour Git version 2.x, voir d'autres réponses.


résumé:

  • git add -A étapes tous les changements

  • git add . étapes nouveaux fichiers et modifications, sans suppressions

  • git add -u modifications et suppressions d'étapes, sans nouveaux fichiers


détail:

git add -A est l'équivalent de git add .; git add -u .

le point important à propos de git add . est qu'il regarde l'arbre de travail et ajoute tous ceux les chemins vers les changements par étapes s'ils sont changés ou s'ils sont nouveaux et non ignorés, ils ne mettent pas en scène des actions "rm".

git add -u regarde tous les déjà les fichiers suivis et les étapes les changements à ces fichiers s'ils sont différents ou s'ils ont été supprimés. Il n'ajoute pas de nouveaux fichiers, il ne fait que mettre en scène des changements dans des 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 être 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
3717
répondu CB Bailey 2018-08-30 19:04:23
la source

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 allongée:

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

670
répondu Developer 2017-05-23 15:26:36
la source

avec Git 2.0, git add -A est par défaut: git add . égale git add -A . .

git add <path> est le même que " git add -A <path> " maintenant, de sorte que " git add dir/ " remarquera les chemins que vous avez retirés du répertoire et enregistrez le retrait.

Dans les versions plus anciennes de Git, " git add <path> " utilisé pour ignorer les suppressions.

vous pouvez dire " git add --ignore-removal <path> " à ajouter seulement des chemins ajoutés ou modifiés dans <path> , si vous le voulez vraiment.

git add est comme git add :/ ( ajouter de tout, des repo git dossier ).

Notez que git 2.7 (Nov. 2015) vous permettra d'ajouter un dossier nommé " : "!

Voir commit 29abb33 (25 Oct 2015) par Junio C Hamano ( gitster ) .


notez que commençant git 2.0 (Q1 ou Q2 2014) , en parlant de git add . (chemin courant dans l'arbre de travail), vous devez utiliser ' . "dans les autres commandes git add ainsi.

qui signifie:

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

(noter l'extra . "pour git add -A et git add -u )

parce que git add -A ou git add -u fonctionnerait (démarrage git 2.0 seulement) sur le arbre de travail entier , et pas seulement sur le chemin actuel.

ces commandes fonctionnent sur l'arbre entier en 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 pour faire " git add -u "se comporter comme si" git add -u . ", il 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 courant pour commencer la formation de leurs doigts à dire explicitement" git add -u . " quand ils le signifient avant Git 2.0 vient.

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 courant. , parce que le comportement dans Git 2.0 sera différent de la version d'aujourd'hui dans une telle situation.

142
répondu VonC 2017-05-23 15:10:45
la source

donc, D'après les instructions de Charles ci-dessus, après avoir testé ma compréhension proposée 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: Supprimer des fichiers supprimés de votre répertoire de travail Git .

127
répondu Richard 2013-07-11 09:54:30
la source

tard à la partie, mais cette question mérite aussi une réponse plus rapide distillée.

git add -A 

les deux ci-dessous (même en tant que git add-tous )

git add . 

Stades de + fichiers modifiés

git add -u 

étapes modifiées + fichiers supprimés

29
répondu K. Kilian Lindberg 2014-04-23 15:48:01
la source

les choses ont changé avec Git 2.0:

  • -A est maintenant la valeur par 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 fonctionne sur l'ensemble de l'arbre

donc pour git 2 la réponse est:

  • git add . et git add -A . ajouter nouveau/modifié/supprimé des fichiers dans le répertoire courant
  • 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 courant
24
répondu 0xF 2014-10-13 19:29:52
la source

enfin je pense que je comprends, merci à vous tous. J'espère que cela pourra apporter 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 nul.

Pathspec peut être un chemin d'accès ou point '."pour indiquer le répertoire courant.

Important de connaissances de base sur la façon git 'ajoute'.

  • les fichiers invisibles, préfixés avec un point, (dotfiles) ne sont jamais automatiquement reconnus par Git. Ils ne sont même pas listés comme "non tracés".
  • Les dossiers vides
  • ne sont jamais ajoutés par git. Ils ne sont même pas listés comme "non tracés". (Une solution consiste à ajouter un fichier vierge, éventuellement invisible, aux fichiers suivis.)
  • git status n'affichera pas d'informations sur les sous-dossiers, c'est-à-dire des fichiers non tracés, à moins qu'au moins un fichier dans ce sous-dossier ne soit retracé. Avant cette date, git considère que le dossier entier est hors de portée, une la "vide". Il est vide de suivi article.
  • spécifiant un filespec ='.'(dot), ou le répertoire courant, n'est pas récursif à moins que-a ne soit aussi spécifié. Dot se réfère strictement au répertoire courant - il omet les chemins trouvés au-dessus et au-dessous.

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

les limiteurs sont les suivants.

  • -u = --mise à jour = sous-ensemble de dossiers => Ajouter = Non; Changement = Oui; Supprimer= Oui. => le forum de l'élément est suivi.
  • - a = --all (no such-a, which gives syntax error) = superset de tous les fichiers non tracés/suivis , à moins que dans Git < 2.0, où si le point filespec est donné, alors seulement ce dossier particulier est considéré. => iff l'article est reconnu, git add-a le trouvera et l'ajoutera.

La pathspec est comme suit.

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

git add -A .

git add -u .

en conclusion, ma politique est;

  • 1.S'assurer que tout les beaux mecs/fichiers les additions sont comptabilisées dans le statut git.
  • 1A.Si des éléments sont manquants, en raison de fichiers/dossiers invisibles, ajoutez-les séparément.
  • 2.Avoir un bon gitignore de sorte que normalement seuls les fichiers d'intérêt ne sont pas tracés et/ou non reconnus.
  • 3.De haut niveau de l'opération, "git add -Un" pour ajouter tous les éléments. Cela fonctionne dans toutes les versions de git.
  • 4.Supprimer tous les éléments désirés de l'index si désiré.
  • 6.S'il y a un gros bug, faites 'git reset' pour effacer entièrement l'index.
11
répondu AnneTheAgile 2016-11-21 17:45:57
la source

git add . égale git add -A . ajoute des fichiers à index uniquement à partir de dossiers courants et enfants.

git add -A ajoute des fichiers à index à partir de tous les dossiers de l'arbre de travail.

P. S.: l'information se rapporte à Git 2.0.

8
répondu Alex78191 2016-06-03 22:12:18
la source

Dans Git 2.x :

  • si vous êtes situé directement au répertoire de travail , puis git add -A et git add . travail sans différence.

  • si vous êtes dans l'un des sous-répertoires du répertoire de travail , git add -A ajoutera tous les fichiers de la totalité du répertoire de travail , et git add . " va ajouter des fichiers à partir de votre répertoire courant .

et c'est tout.

7
répondu simhumileco 2018-03-17 01:32:31
la source

Autres questions sur git git-add