2010-07-01 14 views
36

Ich bin neu in Git, komme aus SVN Welt. Bis jetzt scheint es viel nützlicher zu sein, aber ich arbeite immer noch an den Knicken.Muss ich jedes Mal, wenn ich ein Commit machen möchte, Dateien zu Git hinzufügen?

Derzeit mein Workflow ist wie folgt:

Änderungen vornehmen> git add. > git commit> Log-Nachricht eingeben

Was ich nicht verstehe ist, warum ich anscheinend alle meine Dateien hinzufügen muss, bevor ich begehe. Sie sind bereits unter Versionskontrolle? Warum sagt Git Commit mir, dass dem Commit keine Änderungen hinzugefügt wurden, sondern auch, dass ich Dateien verändert habe? Es heißt "Geändert, aber nicht aktualisiert:". Was bedeutet das??

Sorry, wenn dies leicht ist, fühle ich mich wie ich einige übergeordnete Punkt bin fehlt

+2

Große FrageIch fand dies auch sehr verwirrend.Anscheinend, Sie nicht "Hinzufügen" zu dem Projekt hinzufügen Sie – Kokodoko

Antwort

34

Auf diese Weise können Sie Festschreibungen von Änderungen trennen. Wenn Sie nur diese Dateien jetzt begehen wollen, unter einem begehen, und dann diesen nächsten Dateien nun unter einem zweiten begehen, könnten Sie tun:

git add files_under_one_topic 
git commit -m "this is about one thing" 

git add files_left_over_to_commit_about_a_completely_different_topic 
git commit -m "this is about another thing." 
+0

ah, so dass es ist! – Hamy

+3

Es geht weiter sie sogar als das. Mit 'git add -p' können Sie einige Änderungen in einer Datei vornehmen, andere jedoch nicht. – Novelocrat

+0

whoa. das ist wirklich mächtig. Gut zu wissen, dass das möglich ist, es wird wahrscheinlich un-handlich die wenigen Male kommen, die ich es brauche! – Hamy

11

Sie sind nicht Dateien in dem Sinne, hinzufügen, die du bist Setzen Sie sie unter Git-Kontrolle, aber Sie fügen sie zu einer Änderungsliste hinzu. Einige andere SCMs, wie z. B. force, tun dies auch. Es ist praktisch, um verschiedene Sätze von Änderungen zu erstellen, für die Sie noch nicht bereit sind, aber Sie möchten in separaten Blöcken festschreiben.

Sie einfach in einer subversionish Weise begehen git commit -a tun - das alles begehen wird, die git kennt das geändert wurde, wie, was svn commit tut.

(PS. Da du aus der SVN-Welt kommst, werde ich eine andere Frage erwähnen, die mich für eine Schleife für ein bisschen warf - wenn du git diff, zeigt es dir nur den Unterschied zwischen deinem aktuellen Zustand und Was ist in der Änderungsliste, NICHT der Unterschied zwischen Ihrem aktuellen Status und dem letzten Commit Wenn Sie git diff sofort nach dem Hinzufügen aller geänderten Dateien ausführen (zB git add -u), sehen Sie ein leeres Diff, obwohl es Unterschiede gibt, die begangen werden müssen!)

+0

Ah, danke für die PS! Das ist definitiv etwas, mit dem ich zu kämpfen habe! – Hamy

15

Git funktioniert mit einem "Staging" -Bereich, wo Sie vorbereiten, was Sie als Commit bündeln werden. Sie haben also entschieden, welche Änderungen Sie vornehmen möchten (z. B. alle oder eine Teilmenge), Sie fügen sie dem Staging-Bereich hinzu und dann legen Sie fest, was im Staging-Bereich enthalten ist.

Wenn Sie "git status" aufrufen, wird Ihnen angezeigt, was zum Staging-Bereich hinzugefügt wurde (dh "Committed-Änderungen"), was unter den Dateien geändert wurde, die git verfolgt (dh Geändert, aber nicht aktualisiert)) und alle neuen Dateien, die Sie zuvor noch nie hinzugefügt haben (dh nicht gepackte Dateien).

Wenn Sie nur Sachen, die Sie geändert haben, übergeben wollen, aber keine neu erstellten Dateien enthalten, können Sie git commit -a - verwenden. m "Kommentar für modifizierte Dateien bereits unter Quellcodeverwaltung."

+0

Super, danke! – Hamy

+4

Beachten Sie auch, dass "git stage" anstelle von "git add" verwendet werden kann, wenn es hilft, die Dinge im Kopf zu behalten. –

+0

Ah, cool!Danke – Hamy

Verwandte Themen