La commande git add [--all|-A]
semble être identique à git add .
. Est-ce correct? Sinon, en quoi diffèrent-ils?
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 *
?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 devenugit 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
ougit 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 pasadd -u
en deux commandes distinctesadd -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ériquesVoici 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:
la source
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
, legit 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 -A
est commegit 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 autresgit add
commandes.Cela signifie:
(Notez le supplément '
.
' pourgit add -A
etgit add -u
)Parce que
git add -A
ougit add -u
fonctionnerait (à partir de git 2.0 uniquement) sur la totalité de l'arborescence de travail , et pas seulement sur le chemin actuel.la source
D' après les instructions de Charles , après avoir testé ma compréhension proposée serait la suivante:
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 .
la source
Les choses ont changé avec Git 2.0 ( 2014-05-28 ):
-A
est maintenant la valeur par défaut--ignore-removal
.git add -u
etgit 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 .
etgit 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 courantla source
Une réponse rapide plus distillée:
Fait les deux ci-dessous (comme git add --all )
Stades nouveaux fichiers + modifiés
Étapes fichiers modifiés + supprimés
la source
git add :/
+git add -u :/
Dans Git 2.x :
Si vous vous trouvez directement dans le répertoire de travail , alors
git add -A
etgit 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 etgit add .
ajoutera des fichiers de votre répertoire actuel .Et c'est tout.
la source
J'espère que cela apportera plus de clarté.
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.la source
git add .
équivaut àgit add -A .
ajoute des fichiers à indexer uniquement à partir des dossiers actuels et enfants.git add -A
ajoute des fichiers à indexer à partir de tous les dossiers de l'arborescence de travail.PS: les informations concernent Git 2.0 (2014-05-28).
la source
Les deux
git add .
etgit 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 fairegit 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:
Si votre répertoire de travail actuel est
/my-repo
, et vous le faitesrm rootfile.txt
, puiscd subfolder
, puisgit 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.la source
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 GitUne chose que j'ajouterais est que si le mode
--interactive
ou-p
est utilisé, ilgit add
se comportera comme si l'-u
indicateur update ( ) était utilisé et n'ajoutait pas de nouveaux fichiers.la source