Ich lerne Git und habe festgestellt, dass es einen zweistufigen Festschreibungsprozess gibt:
git add <files>
git commit
Der erste Schritt fügt Revisionen in den sogenannten "Staging-Bereich" oder "Index" ein.
Mich interessiert, warum diese Entwurfsentscheidung getroffen wird und welche Vorteile sie hat.
Machst du das auch als Git-User oder benutzt du es einfach git commit -a
?
Ich frage dies, da ich von bzr (Bazaar) komme, der diese Funktion nicht hat.
version-control
git
workflows
thomasrutter
quelle
quelle
git add -p
festlegen können, dass ein Teil einer Datei festgeschrieben wird, während ein anderer Teil derselben Datei nicht festgeschrieben wird .git status
und möglicherweisegit push
. Bei allem Hype um Git (und GitHub-Sharing-Code ist wunderbar) sind Teile sehr nervigAntworten:
Arbeit in separate Commits aufteilen. Sie haben wahrscheinlich schon oft eine Datei geöffnet, um einen einzeiligen Fix zu schreiben, aber gleichzeitig haben Sie festgestellt, dass die Formatierung falsch ist, dass einige Dokumentationen verbessert werden könnten oder ein anderer Fix, der nichts mit dem Problem zu tun hat. Bei anderen RCS müssten Sie das aufschreiben oder in den Speicher schreiben, den Fix beenden, den festschreiben und dann zurückkehren, um die anderen Probleme zu beheben (oder ein Ball-of-Mud-Commit mit nicht verwandten Problemen erstellen). . Mit Git können Sie einfach alles auf einmal reparieren und die einzelne Zeile separat mit
git add -i
oder + festschreibengit-gui
.Unterbrechen Sie nicht den Build. Sie arbeiten an einer komplizierten Modifikation. Sie probieren also verschiedene Dinge aus, von denen einige besser funktionieren als andere, von denen einige Dinge kaputt machen. Mit Git würden Sie Dinge inszenieren, wenn die Modifikation die Dinge besser gemacht hat, und
checkout
(oder noch mehr optimieren), wenn die Modifikation nicht funktioniert hat. Sie müssen sich nicht auf die Rückgängig-Funktionalität des Editors verlassen,checkout
sondern können das gesamte Repo anstatt nur Datei für Datei und alle Fehler auf Dateiebene (z. B. Entfernen einer Datei, die nicht festgeschrieben wurde, oder Speichern + Schließen nach einem schlechte Änderung) führt nicht zu viel Arbeit verloren.quelle
git add -i
mit einem einstufigen Commit machen? Sie wählen einfach eine Reihe von Dateien (oder Zeilen in Dateien) aus, die sich auf eine einzelne Funktion beziehen, und führen ein Commit durch. Dann würden Sie zurückkommen und ein zweites Commit für ein anderes Feature durchführen.git-branch
Art und Weise verfolgt ( jovicailic.org/2017/04/vim-persistent-undo ). Außerdem wird Ihr Rückgängig-Verlauf jedes Mal automatisch aufgezeichnet, wenn Sie in den normalen Modus wechseln. So wird Ihre mentale Belastung durch das Erstellen von "manuellen Rückgängigmachungspunkten" verringert. Warum ist die Verwendung der Rückgängig-Puffer Ihrer Editoren nicht so methodisch?Einer der Vorteile für mich ist die Möglichkeit, Dateien schrittweise hinzuzufügen. Vor dem Festschreiben überprüfe ich jede Datei. Sobald die Datei überprüft wurde, füge ich sie hinzu. Wenn ich
git status
odergit diff
, zeigt git mir nur die Dateien an, die geändert und noch nicht hinzugefügt wurden. Wenn ich alle Dateien überprüft und hinzugefügt habe, kann ich einen Commit durchführen.Also ja, ich finde den Staging-Bereich sehr hilfreich.
Und nein, ich benutze es nie
git commit -a
. Ich benutze jedoch oftgit add -u
. Auf diese Weise kann ich immer noch visualisieren, was zu begehen ist.quelle
Der Vorteil ist ganz einfach: Sie haben die volle Kontrolle darüber, welche Dateien Sie wann festschreiben möchten. In diesem Fall können Sie
git add -p
steuern, welche Zeilen Sie festschreiben möchten.quelle
.gitignorelines
, mit der Sie lokale Änderungen an einzelnen Zeilen vornehmen können, die Commits überleben und intakt bleiben.app.conf
einedb.conf
Datei, die das Zeug enthält, das Sie teilen möchten, und eine, die Sie einfach in die .gitignore-Liste aufnehmen. Problem gelöst. Wenn Sie etwas Eigenes verwenden, sollten Sie wirklich darauf achten, dass etwas so Einfaches darin enthalten ist. Oder setzen Sie es durch einen Präprozessor in einem Pre-Build-Ereignis. Viele Lösungen da.Einer der Vorteile, die ich mag, ist die Fähigkeit, einen Teil einer Änderung festzuschreiben. Dh mit git add -e. Ich lege nicht so oft fest, wie ich es manchmal tun sollte, und mit dem Befehl git add -e kann ich meine Änderungen bis zu einem gewissen Grad auflösen.
quelle