2016-06-10 5 views
1

Ich lerne Git Befehle.Warum brauchen wir den Dateinamen in git add command?

Mein Verständnis von Git Add und Git Commit ist wie folgt: Git add 'Dateiname' nimmt Snapshot des Projekts (gesamte Arbeitsverzeichnis) und Bühne. git commit speichert den inszenierten Snapshot im Repository.

Ich verstehe auch, dass Git unterscheidet sich von SVN usw. in der grundlegenden Art der Speicherung der Dateien. Während SVN inkrementelle Änderungen in einzelnen Dateien speichert, speichert Git Snapshot des gesamten Arbeitsverzeichnisses. Wenn sich eine Datei nicht geändert hat, enthält Git-Snapshot einen Verweis auf diese Datei im vorherigen Snapshot.

Ich habe eine Frage hier. Wenn git add einen Snapshot des gesamten Arbeitsverzeichnisses erstellt, warum müssen wir einen individuellen Dateinamen im Befehl angeben? Git würde sowieso einen Schnappschuss des gesamten Projekts machen.

+1

'git Datei hinzufügen [Datei ...]' fügt * nur die angegebenen Dateien * hinzu, nicht das gesamte Arbeitsverzeichnis. Aber es erlaubt Ihnen, ein Verzeichnis anzugeben, was "alle Dateien im Verzeichnis" bedeutet; und wenn Sie oben in Ihrem Arbeitsbaum stehen und '.' angeben, ergibt das" alle Dateien im Arbeitsbaum ". Es gibt einige Ausnahmen hier wegen '.gitignore' Dateien und ähnlichem, aber das deckt den größten Teil ab. – torek

+0

Sie können 'git add -u' verwenden, um alle zuvor verfolgten Dateien hinzuzufügen. – o11c

+0

Ich frage mich, warum niemand erwähnt "git add -A". – user3159253

Antwort

2

Weil Sie nicht wollen, um jede einzelne Datei hinzuzufügen, die hinzugefügt oder geändert wurde.

Nehmen wir an, Sie haben Ihre xyzzy.c Datei geändert, aber Sie haben auch ein sehr schönes Bild, taylor_swift.jpg, in das aktuelle Verzeichnis heruntergeladen (und hatten noch keine Chance, es anderswo zu verschieben).

Sie nicht letztere Datei möchte seinen Weg in den Repo zu finden, so dass Sie einfach tun:

git add xyzzy.c 

abd, das nur die Datei, die Sie hinzugefügt wollen erstellt.

Auf jeden Fall, wenn Sie jede Datei im aktuellen Verzeichnis möchten, können Sie einfach tun:

git add . 

ich es als die drei Bereiche denken neigen.

Zuerst Ihr Arbeitsbereich, wo Sie einen bestimmten "Schnappschuss" ausgecheckt haben, mit allen Änderungen, die Sie vorgenommen haben.

Dann der Staging-Bereich, der Dateien für das nächste Commit enthält.

Und schließlich der git-richtige Bereich, der alle festgeschriebenen Änderungen enthält.

Wenn Sie in diesen Begriffen denken, dann kopiert add dann einzelne Dinge von der Arbeit zur Staging, und commit kopiert alles von Staging zu Git-richtig.

+0

Das heißt, wenn git einen Snapshot des Projekts erstellt, würde snapshot modifizierte Dateien enthalten, die im Befehl git add erwähnt werden, während für andere Dateien nur eine Verknüpfung zur vorherigen identischen Datei gespeichert wäre (selbst wenn sich die Datei geändert hat). – Mandroid

+0

@Mandroid, ich neige dazu, es als die drei Bereiche zu denken. Ihr Arbeitsbereich, in dem Sie einen bestimmten "Snapshot" ausgecheckt haben, mit den von Ihnen vorgenommenen Änderungen, den Staging-Bereich, der Dateien für den nächsten Commit enthält, und den Git-Eigenschaftsbereich, der alle festgeschriebenen Änderungen enthält. 'add' kopiert dann einzelne Dinge von der Arbeit bis zum Staging, commit kopiert alles von der Staging- in git-proper. – paxdiablo

+0

diese Erklärung hilft viel bei der Visualisierung der Dinge. – Mandroid

0

Kasse die git Dokumentation über git add

einfach können Sie verwenden.

Sie können git add . verwenden dies wird das gesamte Verzeichnis/neue Dateien/modifizierte Dateien - bereit zu begehen.

1

Ihr Verständnis über Snapshot in Git ist falsch. Wie im Dokument der git-Website [Snapshots, Not Differences] gezeigt, ist der Snapshot Ihres Projekts eine Zusammenfassung von Snapshots für alle Dateien, die Sie in Ihrem Repository hinzugefügt haben. Aus diesem Grund müssen Sie den Dateinamen unter git add eingeben.

Nachdem Sie git mitgeteilt haben, welche Datei von git add <filename> verwaltet werden soll, können Sie git add -u verwenden, um Ihre Änderung zu speichern. In diesem Fall ist der Dateiname nicht erforderlich.

+0

Danke für den Link. Mein Verständnis von Snapshot in Git war falsch. – Mandroid