Frage Unterschied zwischen "git add-A" und "git add"


Der Befehl git add [--all|-A] scheint identisch zu sein git add .. Ist das richtig? Wenn nicht, wie unterscheiden sie sich?


2390
2018-02-21 06:51


Ursprung


Antworten:


Zum Git Version 2.x, siehe auch die Antworten unten.


Zusammenfassung:

  • git add -A Phasen Alle

  • git add . Bühnen neu und modifiziert, ohne gelöscht zu werden

  • git add -u Stufen modifiziert und gelöscht, ohne neu


Detail:

git add -A ist äquivalent zu git add .; git add -u.

Der wichtige Punkt über git add . ist, dass es den Arbeitsbaum betrachtet und all diese Pfade zu den gestuften Änderungen hinzufügt, wenn sie entweder geändert oder neu sind und nicht ignoriert werden, es werden keine "rm" -Aktionen durchgeführt.

git add -u schaut auf all das bereits verfolgte Dateien und führt die Änderungen an diesen Dateien durch, wenn sie unterschiedlich sind oder wenn sie entfernt wurden. Es werden keine neuen Dateien hinzugefügt, es werden nur Änderungen an bereits verfolgten Dateien vorgenommen.

git add -A ist eine praktische Abkürzung, um beides zu tun.

Sie können die Unterschiede mit etwas wie diesem testen (beachten Sie, dass für Git Version 2.x Ihre Ausgabe für git add .  git status  werden Sei anders):

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



Hier ist Tabelle zum schnellen Verständnis:

Git Version 1.x: enter image description here

Git Version 2.x: enter image description here

Langformflaggen:

  • git add -A ist äquivalent zu git add --all
  • git add -u ist äquivalent zu git add --update

Weiterführende Literatur:


646
2017-09-25 12:45



Mit Git 2.0, git add -A ist Standard: git add . ist gleich git add -A ..

git add <path> ist das gleiche wie "git add -A <path>"Jetzt, so dass   "git add dir/"werden die Pfade bemerken, die Sie aus dem Verzeichnis entfernt haben und   notieren Sie die Entfernung.
  In älteren Versionen von Git "git add <path>"Früher habe ich Umzüge ignoriert.

Sie können sagen "git add --ignore-removal <path>"zu   Fügen Sie nur hinzugefügte oder geänderte Pfade hinzu <path>, wenn du wirklich willst.

git add ist wie git add :/ (füge alles aus dem top git repo folder hinzu).
Beachten Sie, dass git 2.7 (Nov. 2015) Ihnen erlaubt, einen Ordner namens ":"!
Sehen begehen 29abb33 (25 Okt 2015) von Junio ​​C Hamano (gitster).


Beachten Sie, dass Start git 2.0 (Q1 oder Q2 2014), wenn ich darüber spreche git add . (aktueller Pfad innerhalb des Arbeitsbaums), müssen Sie '.' in dem anderen git add Befehle auch.

Das bedeutet:

"git add -A ." ist äquivalent zu "git add .; git add -u ."

(Beachten Sie die zusätzlichen '.' zum git add -A und git add -u)

weil git add -A oder git add -u würde funktionieren (nur git 2.0) auf dem gesamter funktionierender Baumund nicht nur auf dem aktuellen Pfad.

Diese Befehle werden arbeiten Sie in Git 2.0 am gesamten Baum aus Gründen der Konsistenz mit "git commit -a"und andere Befehle.   Weil es keinen Mechanismus geben wird,git add -u"benehmen sich als ob"git add -u ."Es ist wichtig für diejenigen, die es gewohnt sind"git add -u"(ohne pathspec) Aktualisieren des Index nur für Pfade im aktuellen Unterverzeichnis, um mit dem Trainieren ihrer Finger zu beginnen, um explizit zu sagen"git add -u ."Wenn sie es meinen, bevor Git 2.0 kommt.

Eine Warnung wird ausgegeben, wenn diese Befehle ohne Pfadangabe ausgeführt werden und wenn lokale Änderungen außerhalb des aktuellen Verzeichnisses vorgenommen werden, weil das Verhalten in Git 2.0 anders sein wird   von der heutigen Version in einer solchen Situation.


135
2018-04-23 06:32



Aus den oben genannten Anweisungen von Charles würde mein vorgeschlagenes Verständnis dann wie folgt lauten:

# 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

Dieser Link kann auch hilfreich sein, um zu verstehen, in welcher Situation diese Befehle angewendet werden können: Gelöschte Dateien aus Ihrem Git-Arbeitsverzeichnis entfernen.


126
2018-06-01 09:27



Spät zur Party aber diese Frage verdient auch eine mehr destillierte schnelle Antwort.

git add -A 

Ist beides unten (gleich wie Git hinzufügen --all)

git add . 

Stages neue + modifizierte Dateien

git add -u 

Stages modifiziert + Dateien gelöscht


26
2018-04-06 12:56



Dinge haben sich geändert mit Git 2.0:

  • -A ist jetzt der Standard
  • Das alte Verhalten ist jetzt mit verfügbar --ignore-removal
  • git add -u und git add -A In einem Unterverzeichnis ohne Pfade auf der Kommandozeile arbeiten Sie am gesamten Baum

Für Git 2 lautet die Antwort:

  • git add . und git add -A . fügen Sie neue / geänderte / gelöschte Dateien im aktuellen Verzeichnis hinzu
  • git add --ignore-removal . fügt neue / geänderte Dateien im aktuellen Verzeichnis hinzu
  • git add -u . fügt modifizierte / gelöschte Dateien im aktuellen Verzeichnis hinzu
  • Ohne den Punkt fügen Sie alle Dateien im Projekt unabhängig vom aktuellen Verzeichnis hinzu

23
2017-10-13 15:29



Endlich denke ich, ich bekomme das, vielen Dank an euch alle. Ich hoffe, dass dies mehr Klarheit bringt.

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

Limiter können -u oder -A oder nil sein.

Pathspec kann ein Dateipfad oder ein Punkt sein, '.' um das aktuelle Verzeichnis anzuzeigen.

Wichtiges Hintergrundwissen darüber, wie git "hinzufügt".

  • Unsichtbare Dateien, denen ein Punkt vorangestellt ist (dotfiles), werden von Git niemals automatisch erkannt. Sie werden niemals als "untracked" aufgeführt.
  • Leere Ordner werden niemals von git hinzugefügt. Sie werden niemals als "untracked" aufgeführt. (Eine Problemumgehung besteht darin, den verfolgten Dateien eine leere, möglicherweise unsichtbare Datei hinzuzufügen.)
  • Der Git-Status zeigt keine Unterordnerinformationen an, dh nicht aufgezeichnete Dateien, es sei denn, mindestens eine Datei in diesem Unterordner wird nachverfolgt. Vor dieser Zeit betrachtet git den gesamten Ordner als "leer". Es ist leer von verfolgten Artikeln.
  • Angabe einer Dateispezifikation = '.' (Punkt) oder das aktuelle Verzeichnis ist nicht rekursiv, wenn nicht -A auch angegeben wird. Dot bezieht sich ausschließlich auf das aktuelle Verzeichnis - es fehlen die oben und unten gefundenen Pfade.

Nun, angesichts dieses Wissens können wir die obigen Antworten anwenden.

Die Limiter sind wie folgt.

  • -u = --update = Teilmenge zu verfolgten Dateien => Add = No; Änderung = Ja; Löschen = Ja. => wenn der Artikel verfolgt wird.
  • -A = --all (keine solche -a, die einen Syntaxfehler ergibt) = Obermenge aller nicht verfolgten / verfolgten Dateien, außer in Git <2,0, wobei, wenn die Punktdateispezifikation angegeben wird, nur dieser bestimmte Ordner berücksichtigt wird. => Wenn das Objekt erkannt wird, wird git add -A es finden und hinzufügen.

Die Pfadangabe ist wie folgt.

  • In Git <2.0 gilt für die beiden Begrenzer (update und all), dass die neue Standardeinstellung darin besteht, dass der gesamte Arbeitsbaum anstelle des aktuellen Pfads (git <= 1.9) verwendet wird.
  • In Version 2.0 kann die Operation jedoch auf den aktuellen Pfad beschränkt werden: Fügen Sie einfach das explizite Punktsuffix hinzu (das auch in Git <= 1.9 gültig ist);

git add -A .

git add -u .

Abschließend ist meine Politik;

  • 1.Vergewissern Sie sich, dass alle hinzuzufügenden hunks / Dateien im git-Status berücksichtigt werden.
  • 1A.Falls irgendwelche Elemente aufgrund von unsichtbaren Dateien / Ordnern fehlen, fügen Sie sie separat hinzu.
  • 2. Haben Sie einen guten Gitignore, so dass normalerweise nur interessante Dateien nicht erkannt und / oder nicht erkannt werden.
  • 3.Von der obersten Ebene des Repos "git add -A", um alle Elemente hinzuzufügen. Dies funktioniert in allen Versionen von Git.
  • 4. Entfernen Sie alle gewünschten Elemente aus dem Index, falls gewünscht.
  • 6. Wenn es einen großen Fehler gibt, 'git reset', um den Index vollständig zu löschen.

11
2018-04-06 02:03



git add . ist gleich git add -A . Fügt Dateien zum Index nur aus aktuellen und untergeordneten Ordnern hinzu.

git add -A fügt Dateien aus allen Ordnern in der Arbeitsbaumstruktur zum Index hinzu.

P.S .: Informationen beziehen sich auf Git 2.0.


7
2018-06-03 19:12



Im Git 2.x:

  • Wenn Sie direkt an der Arbeitsverzeichnis, dann git add -A und git add . Arbeit ohne Unterschied.

  • Wenn Sie sich in einem Unterverzeichnis der Arbeitsverzeichnis, git add -A fügt alle Dateien aus dem ganzen hinzu Arbeitsverzeichnis, und git add . fügt Dateien von Ihrem hinzu Aktuelles Verzeichnis.

Und das ist alles.


2
2018-03-16 22:32