Réponses:
Cette réponse ne s'applique qu'aux 1.x version Git . Pour Git version 2.x, voir les autres réponses.
Sommaire:
git add -A
met en scène tous les changements
git add .
étapes de nouveaux fichiers et modifications, sans suppressions
git add -u
étapes modifications et suppressions, sans nouveaux fichiers
Détail:
git add -A
est équivalent à git add .; git add -u
.
L'important, git add .
c'est qu'il regarde l'arborescence de travail et ajoute tous ces chemins aux changements par étapes s'ils sont modifiés ou nouveaux et non ignorés, il ne met en scène aucune action «rm».
git add -u
examine tous les fichiers déjà suivis et organise 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 transposer les modifications 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 ça (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
git add -A -p
ne fonctionne pas comme on pourrait s'y attendre (interroger de manière interactive sur les fichiers non suivis)
git add -A :/
ougit add -A .
git add -u
est devenu git add -u :/
avec ce dernier paramètre étant un chemin d'accès, vous permettant de -u certains répertoires, :/
gère l'arborescence entière.
git add -u
ou git add .
, ce faisant, cela lui facilite la vie même après avoir tenu compte de la taxe mentale supplémentaire ajoutée pour garantir qu'il n'y a pas de problèmes de synchronisation? Je me demande pourquoi Git ne se divise pas add -u
en deux commandes distinctes add -u1
et que l' add-u2
une fonctionne pour les fichiers commençant par des chiffres et l'autre pour les fichiers commençant par des non-numériques
Voici un tableau pour une compréhension rapide:
Git version 1.x :
Git version 2.x :
Indicateurs de forme longue:
git add -A
est équivalent à git add --all
git add -u
est équivalent à git add --update
Lectures complémentaires:
git diff-files -z --diff-filter=M --name-only | xargs -0 git add
pour ajouter uniquement les fichiers modifiés, mais pas les nouveaux fichiers ou les suppressions.
git add .
seuls les nouveaux fichiers qui se trouvent sur le chemin actuel sont ajoutés. C'est-à-dire si vous avez un nouveau répertoire ../foo
, le git add -A
mettra en scène, git add .
ne le fera pas.
git add .
est équivalent à git add -A .
, ce qui équivaut àgit add "*"
Avec Git 2.0, git add -A
est par défaut: git add .
égal àgit add -A .
.
git add <path>
est identique à "git add -A <path>
" maintenant, 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, les "git add <path>
" ignoraient 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 -A
est comme git add :/
( ajouter tout depuis le dossier git repo supérieur ).
Notez que git 2.7 (novembre 2015) vous permettra d'ajouter un dossier nommé " :
"!
Voir commit 29abb33 (25 octobre 2015) de Junio C Hamano ( gitster
) .
Notez que à partir de git 2.0 (Q1 ou Q2 2014) , lorsque vous parlez de git add .
(chemin actuel dans l'arborescence de travail), vous devez également utiliser ' .
' dans les autres git add
commandes.
Cela signifie:
"
git add -A .
" équivaut à "git add .; git add -u .
"
(Notez le supplément ' .
' 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 la totalité de l'arborescence de travail , et pas seulement sur le chemin actuel.
Ces commandes fonctionneront sur l'arborescence entière dans Git 2.0 pour des raisons de cohérence avec "
git commit -a
" et d'autres commandes . Puisqu'il n'y aura pas de 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 les chemins du sous-répertoire courant pour commencer à entraîner leurs doigts à dire explicitement "git add -u .
"quand ils le pensent avant la sortie de Git 2.0.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 actuel , car le comportement de Git 2.0 sera différent de la version actuelle dans une telle situation.
D' après les 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 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 .
Les choses ont changé avec Git 2.0 ( 2014-05-28 ):
-A
est maintenant la valeur par défaut--ignore-removal
.git add -u
et git add -A
dans un sous-répertoire sans chemins sur la ligne de commande opèrent sur la totalité de l'arborescence.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 courantgit add --ignore-removal .
ajoute des fichiers nouveaux / modifiés dans le répertoire courantgit add -u .
ajoute des fichiers modifiés / supprimés dans le répertoire courantUne réponse rapide plus distillée:
git add -A
git add .
git add -u
git add :/
+git add -u :/
Dans Git 2.x :
Si vous vous trouvez directement dans le répertoire de travail , alors git add -A
et git add .
travaillez sans différence.
Si vous êtes dans un sous-répertoire du répertoire de travail , git add -A
ajoutera tous les fichiers de l'ensemble du répertoire de travail et git add .
ajoutera des fichiers de votre répertoire actuel .
Et c'est tout.
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 courant.
Connaissances de base importantes sur la façon dont Git «ajoute»:
-A
est également spécifié. Le point se réfère strictement au répertoire courant - il omet les chemins trouvés au-dessus et en dessous.Maintenant, étant donné ces connaissances, nous pouvons appliquer les réponses ci-dessus.
Les limiteurs sont les suivants.
-u
= --update
= sous-ensemble des fichiers suivis => Ajouter = Non; Changement = Oui; Supprimer = Oui. => si l'article est suivi.-A
= --all
(pas de tel -a
, ce qui donne une erreur de syntaxe) = surensemble de tous les fichiers non suivis / suivis, sauf dans Git avant 2.0, où si la spécification de fichier dot est donnée, alors seul ce dossier particulier est pris en compte. => si l'élément est reconnu, git add -A
le trouvera et l'ajoutera.La pathspec est la suivante.
git add -A .
git add -u .
En conclusion, ma politique est la suivante:
git status
..gitignore
fichier pour que normalement seuls les fichiers d'intérêt ne soient pas suivis et / ou non reconnus.Les deux git add .
et git add -A
mettront en scène tous les fichiers nouveaux, modifiés et supprimés dans les nouvelles versions de Git.
La différence est que les git add -A
fichiers sont placés dans des "sous-répertoires supérieurs, actuels et" qui appartiennent à votre référentiel Git fonctionnel. Mais faire git add .
uniquement des fichiers d'étapes dans le répertoire courant et les sous-répertoires qui le suivent ( pas les fichiers se trouvant à l'extérieur, c'est-à-dire les 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 vous le faites rm rootfile.txt
, puis cd subfolder
, puis git add .
, il ne mettra pas en scène le fichier supprimé. Mais en faisantgit add -A
va certainement mettre en scène ce changement, peu importe d'où vous exécutez la commande.
le -A
option ajoute, modifie et supprime les entrées d'index pour correspondre à l'arborescence de travail.
Dans Git 2, l' -A
option est maintenant la valeur par défaut.
Quand un .
est ajouté qui limite la portée de la mise à jour au répertoire dans lequel vous vous trouvez actuellement, selon la documentation Git
Si no
<pathspec>
est indiqué lorsque l'option -A est utilisée, tous les fichiers de l'arborescence de travail entière sont mis à jour (les anciennes versions de Git étaient utilisées pour limiter la mise à jour au répertoire en cours et à ses sous-répertoires).
Une chose que j'ajouterais est que si le mode --interactive
ou -p
est utilisé, il git add
se comportera comme si l' -u
indicateur update ( ) était utilisé et n'ajoutait pas de nouveaux fichiers.
git add *
?