Der Befehl git add [--all|-A]
scheint identisch zu sein mit git add .
. Ist das richtig? Wenn nicht, wie unterscheiden sie sich?
Diese Antwort gilt nur für Git - Version 1.x . Für Git Version 2.x siehe andere Antworten.
Zusammenfassung:
git add -A
inszeniert alle Änderungen
git add .
Stellt neue Dateien und Änderungen ohne Löschungen bereit
git add -u
Stellt Änderungen und Löschungen ohne neue Dateien bereit
Detail:
git add -A
ist äquivalent zu git add .; git add -u
.
Der wichtige Punkt dabei git add .
ist, dass der Arbeitsbaum betrachtet und alle diese Pfade zu den bereitgestellten Änderungen hinzugefügt werden, wenn sie entweder geändert oder neu sind und nicht ignoriert werden. Es werden keine "rm" -Aktionen ausgeführt.
git add -u
Überprüft alle bereits verfolgten Dateien und führt die Änderungen an diesen Dateien durch, wenn sie unterschiedlich sind oder entfernt wurden. Es werden keine neuen Dateien hinzugefügt, sondern nur Änderungen an bereits verfolgten Dateien vorgenommen.
git add -A
ist eine praktische Abkürzung für beide.
Sie können die Unterschiede testen , mit so etwas wie dieses (beachten Sie, dass für Git - Version Ihrer Ausgabe 2.x für git add .
git status
wird anders sein):
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
funktioniert nicht wie erwartet (fragen Sie interaktiv nach nicht verfolgten Dateien)git add -A :/
odergit add -A .
git add -u
wurdegit add -u :/
der letztere Parameter als Pfad verwendet, der es Ihnen ermöglicht, bestimmte Verzeichnisse zu verwenden und:/
den gesamten Baum zu behandeln.git add -u
oder oder aufgit add .
diese Weise sein Leben erleichtert, selbst nachdem die zusätzliche mentale Steuer berücksichtigt wurde, um sicherzustellen, dass keine Synchronisierungsprobleme auftreten? Ich frage mich, warum Git nicht weiteradd -u
in zwei separate Befehle aufgeteilt wirdadd -u1
undadd-u2
wobei einer für Dateien funktioniert, die mit Ziffern beginnen, und der andere für Dateien, die mit Nicht-Ziffern beginnenHier ist eine Tabelle zum schnellen Verständnis:
Git Version 1.x :
Git Version 2.x :
Langform-Flags:
git add -A
ist äquivalent zugit add --all
git add -u
ist äquivalent zugit add --update
Weiterführende Literatur:
quelle
git diff-files -z --diff-filter=M --name-only | xargs -0 git add
nur die geänderten Dateien hinzufügen, nicht aber die neuen Dateien oder die Löschungen.git add .
nur neue Dateien hinzugefügt werden, die sich auf dem aktuellen Pfad befinden. Dh wenn Sie ein neues Verzeichnis haben../foo
,git add -A
wird es inszeniert,git add .
nicht.git add .
ist äquivalent zugit add -A .
, was äquivalent istgit add "*"
Bei Git 2.0
git add -A
ist Standard:git add .
gleichgit add -A .
.git add -A
ist wiegit add :/
( füge alles aus dem Top-Git-Repo-Ordner hinzu ).Beachten Sie, dass Sie mit Git 2.7 (Nov. 2015) einen Ordner mit dem Namen "
:
" hinzufügen können !Siehe Commit 29abb33 (25. Oktober 2015) von Junio C Hamano (
gitster
) .Beachten Sie, dass Sie ab Git 2.0 (Q1 oder Q2 2014) , wenn Sie über
git add .
(aktueller Pfad innerhalb des Arbeitsbaums) sprechen , '.
' auch in den anderengit add
Befehlen verwenden müssen.Das bedeutet:
(Beachten Sie das zusätzliche '
.
' fürgit add -A
undgit add -u
)Weil
git add -A
odergit add -u
würde (nur ab Git 2.0) für den gesamten Arbeitsbaum und nicht nur für den aktuellen Pfad arbeiten.quelle
Von Charles' Anweisungen , nach meinem Vorschlag Verständnis Prüfung würde wie folgt aussehen :
Dieser Blog-Beitrag kann auch hilfreich sein, um zu verstehen, in welcher Situation diese Befehle angewendet werden können: Entfernen gelöschter Dateien aus Ihrem Git-Arbeitsverzeichnis .
quelle
Mit Git 2.0 ( 28.05.2014 ) haben sich die Dinge geändert :
-A
ist jetzt die Standardeinstellung--ignore-removal
.git add -u
undgit add -A
in einem Unterverzeichnis ohne Pfade in der Befehlszeile wird der gesamte Baum bearbeitet.Für Git 2 lautet die Antwort also:
git add .
undgit add -A .
fügen Sie neue / geänderte / gelöschte Dateien im aktuellen Verzeichnis hinzugit add --ignore-removal .
Fügt neue / geänderte Dateien zum aktuellen Verzeichnis hinzugit add -u .
Fügt geänderte / gelöschte Dateien zum aktuellen Verzeichnis hinzuquelle
Eine schnellere Antwort:
Tut beides unten (wie git add --all )
Stuft neue + geänderte Dateien ein
Stufen geändert + gelöschte Dateien
quelle
git add :/
+git add -u :/
In Git 2.x :
Wenn Sie direkt an der sich das Arbeitsverzeichnis , dann
git add -A
undgit add .
Arbeit ohne Unterschied.Wenn Sie sich in einem Unterverzeichnis des Arbeitsverzeichnisses befinden ,
git add -A
werden alle Dateien aus dem gesamten Arbeitsverzeichnis undgit add .
Dateien aus Ihrem aktuellen Verzeichnis hinzugefügt .Und das ist alles.
quelle
Ich hoffe, dass dies mehr Klarheit schafft.
Begrenzer können -u oder -A oder Null sein.
Pathspec kann ein Dateipfad oder ein Punkt sein. '.' um das aktuelle Verzeichnis anzugeben.
Wichtiges Hintergrundwissen darüber, wie Git 'hinzufügt':
-A
sei denn, dies ist ebenfalls angegeben. Punkt bezieht sich ausschließlich auf das aktuelle Verzeichnis - es werden die oben und unten gefundenen Pfade weggelassen.Angesichts dieses Wissens können wir nun die obigen Antworten anwenden.
Die Begrenzer sind wie folgt.
-u
=--update
= Teilmenge zu verfolgten Dateien => Hinzufügen = Nein; Ändern = Ja; Löschen = Ja. => wenn der Artikel verfolgt wird.-A
=--all
(keine solche-a
, was zu einem Syntaxfehler führt) = Obermenge aller nicht verfolgten / verfolgten Dateien, außer in Git vor 2.0, wobei, wenn die Punktdateispezifikation angegeben ist, nur dieser bestimmte Ordner berücksichtigt wird. => Wenn das Objekt erkannt wird,git add -A
wird es gefunden und hinzugefügt.Die Pfadangabe lautet wie folgt.
git add -A .
git add -u .
Zusammenfassend lautet meine Politik:
git status
..gitignore
Datei, damit normalerweise nur Dateien von Interesse nicht verfolgt und / oder nicht erkannt werden.quelle
git add .
equalsgit add -A .
fügt Dateien nur aus aktuellen und untergeordneten Ordnern zum Index hinzu.git add -A
Fügt Dateien zum Index aus allen Ordnern im Arbeitsbaum hinzu.PS: Informationen beziehen sich auf Git 2.0 (28.05.2014).
quelle
Beide
git add .
undgit add -A
werden alle neuen, geänderten und gelöschten Dateien in den neueren Versionen von Git bereitstellen.Der Unterschied besteht darin, dass
git add -A
Dateien in "höheren, aktuellen und Unterverzeichnissen" bereitgestellt werden, die zu Ihrem funktionierenden Git-Repository gehören. Wenn Sie jedochgit add .
nur Dateien im aktuellen Verzeichnis und in den darauf folgenden Unterverzeichnissen ausführen ( nicht die Dateien, die außerhalb liegen, dh höhere Verzeichnisse).Hier ist ein Beispiel:
Wenn Ihr aktuelles Arbeitsverzeichnis lautet
/my-repo
und Sie dies tunrm rootfile.txt
,cd subfolder
gefolgt vongit add .
, wird die gelöschte Datei nicht bereitgestellt. Abergit add -A
wenn Sie dies tun, wird diese Änderung sicherlich durchgeführt, unabhängig davon, von wo aus Sie den Befehl ausführen.quelle
Die
-A
Option fügt Indexeinträge hinzu, ändert sie und entfernt sie entsprechend dem Arbeitsbaum.In Git 2 ist die
-A
Option jetzt die Standardeinstellung.Wenn a
.
hinzugefügt wird, wird der Umfang des Updates gemäß der Git-Dokumentation auf das Verzeichnis beschränkt, in dem Sie sich gerade befindenEine Sache, die ich hinzufügen würde, ist, dass wenn der Modus
--interactive
oder-p
verwendetgit add
wird, sich das Verhalten so verhält, als ob das-u
Flag update ( ) verwendet wurde, und keine neuen Dateien hinzugefügt werden.quelle