2009-09-30 4 views
8

Als git noob es in einem Rails-Projekt ausprobieren, frage ich mich, ob es eine schlechte Praxis ist, vor jedem Commit git add . (aktuelles Verzeichnis hinzufügen) zu tun. Die Intro-Tutorials, die ich gesehen habe, zeigen das anfängliche Hinzufügen des aktuellen Verzeichnisses und anschließend das Hinzufügen von Dateien mithilfe von git add new_file. Wenn ich eine Menge Dateien aus einer Reihe verschiedener Verzeichnisse hinzufüge, erscheint mir das zu schwierig.Bessere Weise, Git Add zu verwenden?

Im Wesentlichen, wenn Sie mehr als ein oder zwei Dateien hinzufügen, ist es OK, jedes Mal zu verwenden, das ich festsetzen möchte git add .? Verwendet git add . das gleiche wie explizit git add new_file für jede Datei, die seit dem letzten Commit erstellt wurde?

Antwort

11

git add . werden hinzufügen, die, einschließlich dem neuen Dateien in der Hierarchie ist. Wenn Sie alle Dateien im Verzeichnis verfolgen möchten, ist dies in Ordnung.

Eine andere (vielleicht gebräuchlichere) Verwendung ist git commit -a, die nur die Dateien hinzufügt, die seit dem letzten Commit vor dem Commit geändert wurden, und keine neuen Dateien enthält.

EDIT: git add . wird keine Dateien entfernen, die seit dem letzten Festschreiben gelöscht wurden. Wenn Sie Dateien löschen, würde ich git rm <myfile> verwenden, damit git über die entfernte Datei informiert wird, und vergessen Sie nicht, sicherzustellen, dass git weiß, dass es gelöscht wurde. Wie in einem anderen Kommentar erwähnt, werden git commit -a Dateien gelöscht, die gelöscht wurden.

+0

Danke James. Es ist also nicht ineffizient oder redundant, 'git add 'zu verwenden, statt Dateien einzeln hinzuzufügen. Es ist nicht schlecht, bereits hinzugefügte Dateien wieder hinzuzufügen. –

+0

"Eine Datei, die sich nicht geändert hat, erneut hinzufügen" hat keine Auswirkung auf irgendetwas, also nein, es ist nicht schlecht. Ich weiß nicht über ineffizient - git add . ist sofort, wenn ich es verwende, aber ich weiß nicht, ob das in einer großen Ordner Hierarchie bleibt. –

+0

Allerdings fügt 'git add.' Dateien hinzu, die wahrscheinlich nicht sein sollten, wie Editor-Backups und zufällige andere ephemere Gruft. – Novelocrat

4

Vielleicht git-commit -a macht was du willst? Es wird alle modifizierten und/oder gelöschten Dateien, die unter der Versionskontrolle stehen, inszenieren und festschreiben.

4

können Sie git commit -a verwenden, um alle Änderungen an Dateien bereits unter Sourcecontrol zu begehen (das ist wie Befehl der Subversion-Commit) alles

+0

Eine Erklärung zwischen 'git commit -a' und' git add -u' wäre in Ordnung. Die Verwendung von 'git commit -a' kann dazu führen, dass man unwissentlich Dateien hinzufügt, die man nicht beabsichtigt hat. – Sukima

+0

@Sukima: 'git commit -a' wird nur bereits nachverfolgte Dateien übertragen. Es wird niemals neue nicht aufgezeichnete Dateien hinzufügen. – knittl

2

Auch könnte schätzen Sie die interaktiven Modus (‚git add -i‘), die Dinge beschleunigen kann, wenn man selektiv eine Reihe von Dateien hinzufügen müssen. Sie können es in Aktion in this GitCast sehen.

+0

Wurde verschoben oder ersetzt. Fand das stattdessen: http://blip.tv/scott-chacon/c3-add-interactive-4113507 –

+0

Danke @adifferentben - guter Fang. Ich werde meine Antwort mit Ihrer Korrektur aktualisieren. – ewall

+0

@ewall: Aber die Antwort wurde nicht aktualisiert ?! der Link ist immer noch 404. – Sukima

8

Es ist nichts falsch daran, "git add ." zu verwenden, wenn Ihr .gitignore auf dem neuesten Stand ist und Sie sicher sind, dass nichts hinzugefügt wird, das Sie nicht verfolgen möchten. Tun Sie zuerst eine "git status", um dies zu überprüfen.

Ich würde nicht empfehlen, dies vor jedem Commit zu tun, obwohl die meiste Zeit (zumindest für die meisten Anwendungsfälle) bestehende Dateien modifiziert werden und nur eine oder zwei komplett neue Dateien hinzugefügt werden. In diesen Fällen sind "git add -u" und "git add <file>" oft weniger Arbeit als mit "git add ." oder "git add -A". Sie müssen immer überprüfen, dass Sie nicht versehentlich neue Dateien hinzufügen, die eigentlich temporäre Dateien waren und ignoriert werden sollten gelöscht.

"git add ." wäre am nützlichsten, wenn Sie wissen, dass Sie viele neue Dateien in der Hierarchie beginnend mit dem aktuellen Verzeichnis hinzugefügt haben und sie nicht alle explizit angeben möchten. Sie müssen sicherstellen, dass alles, was Sie nicht hinzufügen möchten, korrekt ignoriert wird.

0

Wenn Ihr Fortschritt "single-threaded" oder einfach verzweigt ist, dann gibt es kein intrinsisches Problem, obwohl verschiedene andere Optionen die Vorteile haben, die andere Leute vorgeschlagen haben.Wenn Sie jedoch mehr als ein "Feature" in diesem Zweig haben, das Sie vielleicht selektiv in eine verwandte Branche einbinden möchten, dann wird diese Art von "Alles immer beitragen" -Ansatz zu dieser Zeit für mehr Arbeit sorgen. Es gibt wahrscheinlich andere solche Vorteile (z. B. unter Verwendung von git bisect). Wenn es mehr als einen logischen Thread für die Arbeit gibt, die passiert, kann die Trennung zur Commit-Zeit später schöne Dividenden zahlen.

Verwandte Themen