3480 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?

40voto

K. Kilian Lindberg Punkte 2776

Eine schnellere Antwort:

Ist beides unten (gleich wie git add --all )

git add -A

Stages neue + geänderte Dateien

git add .

Stages geänderte + gelöschte Dateien

git add -u

5 Stimmen

Hallo, was wäre, wenn Sie nur die geänderten Dateien bereitstellen wollten? Wie würden Sie das tun?

2 Stimmen

Hallo, eine gute Frage. Es gibt keine einfache Flagge für das, soweit ich weiß git diff-files -z --diff-filter=M --name-only | xargs -0 git add from -> stackoverflow.com/questions/14368093/

4 Stimmen

Eigentlich ist es git add :/ + git add -u :/

15voto

Sabbir Ahmed Punkte 1256

Beide git add . y git add -A werden alle neuen, geänderten und gelöschten Dateien in den neueren Versionen von Git bereitgestellt.

Der Unterschied besteht darin, dass git add -A stuft Dateien in "höheren, aktuellen und Unterverzeichnissen" ein, die zu Ihrem Git-Arbeits-Repository gehören. Aber die Durchführung einer git add . nur die Dateien im aktuellen Verzeichnis und den folgenden Unterverzeichnissen ( no die außerhalb, d.h. in höheren Verzeichnissen liegenden Dateien).

Hier ist ein Beispiel:

/my-repo
  .git/
  subfolder/
    nested-file.txt
  rootfile.txt

Wenn Ihr aktuelles Arbeitsverzeichnis /my-repo und Sie tun rm rootfile.txt entonces cd subfolder gefolgt von git add . dann wird es no die gelöschte Datei bereitstellen. Aber tun git add -A wird diese Änderung auf jeden Fall durchführen, egal von wo aus Sie den Befehl ausführen.

14voto

Alex78191 Punkte 1536

git add . ist gleich git add -A . fügt dem Index nur Dateien aus dem aktuellen und den untergeordneten Ordnern hinzu.

git add -A fügt dem Index Dateien aus allen Ordnern im Arbeitsbaum hinzu.

P.S.: Die Informationen beziehen sich auf Git 2.0 (2014-05-28).

13voto

AnneTheAgile Punkte 9350

Ich hoffe, dass dies etwas mehr Klarheit schafft.

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

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":

  • Unsichtbare Dateien, d.h. solche, denen ein Punkt vorangestellt ist (Dotfiles), werden von Git nie automatisch erkannt. Sie werden nicht einmal als "untracked" aufgeführt.
  • Leere Ordner werden von Git nie hinzugefügt. Sie werden nicht einmal als "untracked" aufgeführt. (Eine Abhilfe besteht darin, eine leere, möglicherweise unsichtbare Datei zu den verfolgten Dateien hinzuzufügen).
  • Der Git-Status zeigt keine Informationen über Unterordner an, d. h. über nicht verfolgte Dateien, solange nicht mindestens eine Datei in diesem Unterordner verfolgt wird. Solange dies nicht der Fall ist, betrachtet Git den gesamten Ordner als "außer Reichweite", also als "leer". Er ist leer von verfolgten Objekten.
  • Die Angabe eines filespec = '.' (Punkt) oder des aktuellen Verzeichnisses ist nicht rekursiv, es sei denn -A ist ebenfalls angegeben. Dot bezieht sich ausschließlich auf das aktuelle Verzeichnis - Pfade, die darüber oder darunter liegen, werden nicht berücksichtigt.

Mit diesem Wissen 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 die Sendung wird verfolgt.
  • -A = --all (keine solche -a (was zu einem Syntaxfehler führt) = Obermenge aller nicht verfolgten/verfolgten Dateien, es sei denn, in Git vor 2.0, wo bei Angabe des Punktes filespec nur dieser bestimmte Ordner berücksichtigt wird. wenn der Gegenstand erkannt wird, git add -A wird sie finden und hinzufügen.

Die Pfadangabe lautet wie folgt.

  • In Git vor 2.0 wird für die beiden Begrenzer (update und all) standardmäßig der gesamte Arbeitsbaum statt des aktuellen Pfads bearbeitet (Git 1.9 oder früher),
  • In v2.0 kann die Operation jedoch auf den aktuellen Pfad beschränkt werden: Fügen Sie einfach das explizite Punktsuffix hinzu (was auch in Git 1.9 oder früher gültig ist);

git add -A .

git add -u .

Zusammenfassend kann ich sagen, dass meine Politik so aussieht:

  1. Stellen Sie sicher, dass alle hinzuzufügenden Hunks/Dateien in git status .
  2. Wenn aufgrund von unsichtbaren Dateien/Ordnern Elemente fehlen, fügen Sie diese separat hinzu.
  3. Viel Spaß beim .gitignore Datei, so dass normalerweise nur Dateien, die von Interesse sind, nicht aufgespürt und/oder nicht erkannt werden.
  4. Auf der obersten Ebene des Repositorys fügen Sie mit "git add -A" alle Elemente hinzu. Dies funktioniert in allen Versionen von Git.
  5. Entfernen Sie die gewünschten Einträge aus dem Index, falls gewünscht.
  6. Wenn es einen großen Fehler gibt, löschen Sie den Index mit "git reset" vollständig.

5voto

Yehuda Schwartz Punkte 2879

El -A fügt Indexeinträge hinzu, ändert sie und entfernt sie, um sie an den Arbeitsbaum anzupassen.

In Git 2 wird die -A ist jetzt die Standardeinstellung.

Wenn ein . hinzugefügt, die den Umfang der Aktualisierung auf das Verzeichnis beschränkt, in dem Sie sich gerade befinden, wie in der Git-Dokumentation

Wenn keine <pathspec> angegeben wird, werden alle Dateien im gesamten Arbeitsbaum aktualisiert (alte Versionen von Git beschränkten die Aktualisierung auf das aktuelle Verzeichnis und seine Unterverzeichnisse).

Eine Sache, die ich hinzufügen möchte, ist, dass, wenn die --interactive o -p Modus verwendet wird, dann git add wird sich so verhalten, als ob die Aktualisierung ( -u ) verwendet wurde und keine neuen Dateien hinzugefügt wurden.

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