3406 Stimmen

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

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

4815voto

CB Bailey Punkte 693084

Diese Antwort gilt nur für Git Version 1.x . Für Git Version 2.x, siehe andere Antworten.


Zusammenfassung:

  • git add -A Stufen alle Änderungen

  • git add . stuft neue Dateien und Änderungen ein, ohne Löschungen (für das aktuelle Verzeichnis und seine Unterverzeichnisse).

  • git add -u Änderungen und Streichungen von Etappen, ohne neue Dateien


Einzelheiten:

git add -A ist gleichbedeutend mit git add .; git add -u .

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

git add -u schaut sich alle bereits verfolgten Dateien und führt die Änderungen an diesen Dateien durch, wenn sie sich unterscheiden 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 diese beiden Aufgaben.

Sie können die Unterschiede wie folgt testen (beachten Sie, dass bei Git Version 2.x die Ausgabe 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

56 Stimmen

Was ist der Unterschied zwischen git add * ?

1 Stimmen

Ich habe das ausprobiert, und es scheint Dateien hinzugefügt zu haben, die in meinem .gitignore waren. Gibt es eine Möglichkeit, das Gleiche zu tun, aber .gitignore zu ehren?

3 Stimmen

Schade git add -A -p funktioniert nicht so, wie man es erwarten würde (fragt interaktiv nach nicht verfolgten Dateien)

1311voto

Developer Punkte 23523

Git Version 1.x

Befehl

Neue Dateien

Geänderte Dateien

Gelöschte Dateien

Beschreibung

git add -A

Alle (neuen, geänderten, gelöschten) Dateien auf die Bühne bringen

git add .

Neue und geänderte Dateien nur im aktuellen Ordner anzeigen

git add -u

Nur geänderte und gelöschte Dateien einstellen

Git Version 2.x

Befehl

Neue Dateien

Geänderte Dateien

Gelöschte Dateien

Beschreibung

git add -A

Alle (neuen, geänderten, gelöschten) Dateien auf die Bühne bringen

git add .

Alle (neuen, geänderten, gelöschten) Dateien im aktuellen Ordner verschieben

git add --ignore-removal .

Nur neue und geänderte Dateien einstellen

git add -u

Nur geänderte und gelöschte Dateien einstellen

Langformatige Flaggen:

  • git add -A ist gleichbedeutend mit git add --all
  • git add -u ist gleichbedeutend mit git add --update

Lesen Sie weiter:

3 Stimmen

Danke für die Tabelle. Gibt es eine Möglichkeit, nur die Dateien hinzuzufügen, die geändert wurden. Keine neuen Dateien oder gelöschte Dateien

3 Stimmen

@Gokul: Laut diese Stelle können Sie verwenden git diff-files -z --diff-filter=M --name-only | xargs -0 git add um nur die geänderten Dateien hinzuzufügen, nicht aber die neuen Dateien oder die Löschungen.

122 Stimmen

Dies ist nicht ganz richtig, denn git add . fügt nur neue Dateien hinzu, die sich im aktuellen Pfad befinden. Das heißt, wenn Sie ein neues Verzeichnis haben ../foo , git add -A wird es inszenieren, git add . wird nicht.

209voto

VonC Punkte 1117238

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

git add <path> ist gleichbedeutend mit " git add -A <path> " jetzt, so dass " git add dir/ "bemerkt Pfade, die Sie aus dem Verzeichnis entfernt haben, und protokolliert die Entfernung.
In älteren Versionen von Git, " git add <path> " ignorierte Umzüge.

Sie können sagen " git add --ignore-removal <path> ", um nur hinzugefügte oder geänderte Pfade in <path> wenn Sie es wirklich wollen.

git add -A ist wie git add :/ ( alles aus dem obersten Git-Repo-Ordner hinzufügen ).
Beachten Sie, dass git 2.7 (Nov. 2015) Ihnen erlaubt, einen Ordner namens " : "!
Siehe Commit 29abb33 (25. Oktober 2015) von Junio C. Hamano ( gitster ) .


Beachten Sie, dass Start von Git 2.0 (Q1 oder Q2 2014) wenn man über git add . (aktueller Pfad innerhalb des Arbeitsbaums), müssen Sie ' . ' in der anderen git add auch Befehle.

Das bedeutet:

" git add -A . " ist gleichbedeutend mit " git add .; git add -u . "

(Beachten Sie den Zusatz ' . ' für git add -A y git add -u )

Denn git add -A o git add -u würde (nur ab Git 2.0) auf dem gesamter Arbeitsbaum und zwar nicht nur auf dem aktuellen Pfad.

Diese Befehle werden in Git 2.0 auf den gesamten Baum wirken, um die Konsistenz mit " git commit -a " und andere Befehle . Denn es wird keinen Mechanismus geben, um die " git add -u " sich so verhalten, als ob " git add -u . ", ist es wichtig für diejenigen, die an " git add -u " (ohne pathspec), die den Index nur für Pfade im aktuellen Unterverzeichnis aktualisieren, um ihre Finger darauf zu trainieren, 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 Sie lokale Änderungen außerhalb des aktuellen Verzeichnisses vorgenommen haben weil das Verhalten in Git 2.0 anders sein wird in einer solchen Situation von der heutigen Version unterscheidet.

3 Stimmen

@NickVolynkin Das ist großartig! Es freut mich, dass die internationale Gemeinschaft von SO wie beabsichtigt funktioniert. Als Referenz: ru.stackoverflow.com/a/431840

0 Stimmen

@VonC, Schön, die Git-Leute hatten tatsächlich die Frechheit zu sagen, dass ihr Update "die Dinge konsistenter machen wird". Was sie getan haben, ist, noch mehr Verwirrung und Unstimmigkeiten zu schaffen. Es gibt 26 Alphabete und sie hatte um ein bereits verwendetes Kennzeichen wiederzuverwenden.

49voto

simhumileco Punkte 26451

Unter Git 2.x :

  • Wenn Sie sich direkt an der Arbeitsverzeichnis entonces git add -A y git add . ohne den Unterschied zu arbeiten.

  • Wenn Sie sich in einem beliebigen Unterverzeichnis des Arbeitsverzeichnis , git add -A fügt alle Dateien aus dem gesamten Arbeitsverzeichnis そして git add . fügt Dateien aus Ihrem aktuelles Verzeichnis .

Und das ist alles.

48voto

0xF Punkte 2553

Die Dinge haben sich geändert mit Git 2.0 ( 2014-05-28 ) :

  • -A ist jetzt der Standard
  • Das alte Verhalten ist jetzt verfügbar mit --ignore-removal .
  • git add -u y git add -A in einem Unterverzeichnis ohne Pfade in der Befehlszeile wirken auf den gesamten Baum.

Für Git 2 lautet die Antwort also:

  • git add . y git add -A . neue/geänderte/gelöschte Dateien im aktuellen Verzeichnis hinzufügen
  • git add --ignore-removal . fügt neue/geänderte Dateien in das aktuelle Verzeichnis ein
  • git add -u . fügt geänderte/gelöschte Dateien im aktuellen Verzeichnis hinzu
  • Ohne den Punkt werden alle Dateien im Projekt hinzugefügt, unabhängig vom aktuellen Verzeichnis.

5 Stimmen

Ich glaube nicht, dass dies richtig ist. Bei Verwendung von git v2.10.Windows.2 liefert "git add" die Meldung "Nichts angegeben, nichts hinzugefügt". 'git add -A' fügt alle geänderten Dateien hinzu. Das deutet darauf hin, dass '-A' nicht der Standard ist.

0 Stimmen

Der letzte Punkt "Ohne den Punkt, füge alle Dateien im Projekt hinzu, unabhängig vom aktuellen Verzeichnis." funktioniert nicht. Wenn ich {code}git add{code} (ohne .) sage, dann für eine Meldung mit Hinweis, ob ich {code}git add . {code} sagen will

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X