2010-02-19 3 views
5

Ich habe Git seit fast einem Monat mit meinen persönlichen Projekten beschäftigt.Wie verbessert oder ändert Git's Konzept des Index Ihren Workflow?

Ich habe ein ziemlich gutes Verständnis der grundlegenden Reihe von Befehlen und während seine Benutzererfahrung nicht genial ist, finde ich mich immer noch Git mehr als die anderen VCS, die ich in der Vergangenheit verwendet habe.

Allerdings ist ein Konzept, das ich immer noch nicht habe "bekommen", der eigentliche Zweck des Index. Ich habe das Gefühl, dass ich keinen Vorteil ausnutze, den ich mir zu Nutze machen soll.

Wozu dient ein Staging-Bereich? Ich komme aus dem SVN-Land und bin so daran gewöhnt, meine Arbeitskopie als meine Staging-Area zu behandeln und meine Snapshots für meine Commits daraus zu machen.

Also, meine Frage ist:

Was bedeutet diese zusätzliche Dereferenzierungsebene Sie geben? Wie hat der Index Ihren normalen Arbeitsablauf verbessert oder verändert? Können Sie Szenarien bereitstellen, in denen Ihnen der Index erlaubt hat, etwas zu tun, das ohne diesen Code mühsam hätte ausgeführt werden können?

+0

Siehe auch http://stackoverflow.com/questions/1836801/git-should-i-ignore-the-index-ori-is-there-a-killer-application-for-it –

+0

+1 für die Formulierung der Titelfrage so gut. – WinWin

Antwort

7

Es ist definitiv Zeiten, in denen ich auf einem Feature oder ein Bug-Fix anfangen zu arbeiten, und dann einen schnellen Tippfehler oder ein anderes winziges bemerken (vielleicht eine Zeile), was zu beheben. Statt alle meine Arbeit fallen zu lassen, oder sogar git stash zu verwenden, kann ich gerade das gerade diese kleine Änderung über den Index begehen; all meine anderen Arbeiten sind immer noch da, aber jetzt ist das Commit spezifischer: Es zeigt nur dieses kleine Update, anstatt in Dutzenden anderer Zeilen von Änderungen vergraben zu sein. Es wurde für einen viel saubereren Verlauf erstellt, wodurch es einfacher ist, Protokolle nach Änderungen zu durchsuchen, da sie nicht mit anderen Commits vermischt sind.

Im Falle von (komplizierten, großen) Zusammenführungskonflikten ist es auch nett, jede Änderung, die ich an den Index mache, hinzufügen zu können, damit ich weiß, welche Konflikte ich behoben habe und welche zu behandeln sind.

3

Wenn ich persönlich rede, mache ich gerade einen massiven Merge-Konflikt, und ich muss die Gegenstände einzeln reparieren. In diesem Fall kann ich ein "Git Add" für die Dateien ausführen, die ich zusammengeführt habe, und immer noch eine separate Spur von denen, die ich beheben muss.

Sobald ich durch das gegangen sind, kann ich Test compiles ausführen und dann weitere Änderungen erneut hinzufügen, die erforderlich sind, bevor ich in das Repository zu begehen.

1

Manchmal mache ich einen 'git cherry-pick -n' oder 'git merge --squash', um eine Reihe von Änderungen aus einem fremden Zweig zu ziehen, dann werde ich all diese Änderungen aufheben und git interactive add verwenden (git add -i) um nur die Stücke zu inszenieren, die ich möchte. Sie können sogar "hunks" eines Diffs inszenieren und den Rest in einem veränderten Zustand belassen (ideal zum Entfalten von Dingen, die eigentlich commit sein sollten).

Auch großartig, wenn Sie eine ganze Reihe von Dateien bearbeiten, aber Sie entscheiden, dass Sie wirklich alle Dateien im Zusammenhang mit X als eine einzige Festschreibung begehen, bevor Sie weiter gehen, so dass Sie nur diese, commit und weiterarbeiten die anderen Dateien.

Ich mag auch die Art, wie der Staging-Bereich mit Merges funktioniert, um Ihnen zu zeigen, was nicht automatisch inszeniert wurde. Sicher, der Indexbereich ist dafür nicht unbedingt notwendig, aber ich finde das Standardverhalten von diff, das dir einen Unterschied von nur den Nicht-Index-Elementen anzeigt, um nützlich zu sein, so dass du nicht mit dem Stage-Zeugs stört, -cachiert.