2016-07-07 5 views
3

Ich habe ein Python-Projekt, an dem ich gerade forsche. Ich habe an zwei verschiedenen Maschinen gearbeitet, und ich habe kürzlich entdeckt, dass die Hälfte meiner Dateien Tabs und die andere Hälfte Leerzeichen verwendet.Ist ein Format-Update ein frivoler Git-Commit?

Python dies beanstandet, wenn ich eine Datei von einem Rechner zum anderen zu bearbeiten versucht und laufen, so möchte ich alles auf Räume wechseln statt Tabs. Dies scheint jedoch eine Verschwendung eines Git-Commits zu sein - das Ausführen von "git diff" auf den nicht-committed-but-correct-Dateien lässt es so aussehen, als würde ich die gesamte Datei löschen und ersetzen.

Gibt es einen Weg um dies? Das heißt, gibt es eine Möglichkeit, dass ich diese (IMO) frivolen Änderungen "verstecken" kann?

+2

Rein meine Meinung, sondern ein Format-Wechsel nur wirklich zu begehen * verdient * eine echte verpflichten, für sich allein zu sein, mit einer SMS-Nachricht: begehen, warum es da ist ("nur alles in Leerzeichen umzuschalten; kein Code oder Verhaltensänderung bestimmt " oder etwas ähnliches). – torek

+0

Ich stimme @torek zu. Eine Formatänderung, insbesondere von Tabulatoren zu Leerzeichen, sollte ein eigenes Commit sein. Ich trage regelmäßig zu großen Projekten auf GitHub bei und einige meiner Pull-Anfragen, die zusammengeführt wurden, waren weniger bedeutsam als das (z. B. habe ich heute eine Python-Datei "pep-8" -konform gemacht), also würde ich dies zu einem echten Commit machen. –

+0

@torek - Machen Sie diesen Kommentar eine Antwort, und ich werde es akzeptieren (es zeigte sich etwa eine Minute vor Kaz Antwort, die auch hilfreich ist)! – tonysdg

Antwort

5

Es gibt eine rebase - Sie möchten jedoch wahrscheinlich jede Datei rückwirkend in jedem Commit hinzufügen, wo Sie diese Datei bearbeitet haben, was extrem mühsam wäre.

Allerdings gibt es absolut nichts falsch mit ein wie diese begehen zu müssen. Ein Commit stellt eine Änderung dar und stellt einen eindeutigen Funktionszustand Ihres Projekts dar, und das Ersetzen von Tabs durch Leerzeichen ist definitiv ein eigener Status.

Ein Ort, an dem Sie wollen, wäre Rebase verwenden, wenn Sie versehentlich eine nicht-funktionale Festschreibung machen. Zum Beispiel haben Sie möglicherweise nur die Hälfte der Dateien festgelegt, die Sie benötigen.

Eine letzte Sache: nie Geschichte bearbeiten (das heißt mit rebase), wenn Sie Ihre Änderungen auf eine andere Maschine geschoben haben. Die Maschinen werden nicht mehr synchron sein und Ihr Repo wird langsam explodieren.

+0

Während eine gute Antwort, sollten Sie nicht die Anforderung erzwingen, die eine verpflichten muss ein „funktional“ Zustand sein. Es ist vollkommen akzeptabel, unter verschiedenen Umständen einen nicht-funktionalen Codezustand zu haben. (So ​​lange Sie keinen vorhandenen Code brechen, auf den sich jemand verlässt.) Beispielsweise haben wir bei einem großen Projekt bei meiner Arbeit ein Feature-Zweig-Repo-Layout. Jedes Problem erhält seinen eigenen Zweig, Commits für dieses Problem werden dort gemacht und dann zum Trunk zusammengeführt.Während wir uns Sorgen machen müssen, dass der fusionierte Staat funktioniert, müssen die Zweigbefugnisse nicht funktional sein. –

+0

Dies ermöglicht eine Reihe von Vorteilen, wie z. B. detailliertere Zeitleisten, Fortschrittsverfolgung und Teamzusammenarbeit. –

3

Leider gibt es keine Möglichkeit, um die Tatsache, dass auf der Textebene, dies ist eine große Veränderung. Das Beste, was Sie tun können, ist, dass Sie keine Leerzeichen mit anderen Änderungen mischen. Das Thema eines solchen Commits sollte nichts anderes sein als die Whitespace-Änderung.

Wenn diese Verschrobenheit nicht veröffentlicht wird (nur in Ihren privaten Repos), können Sie in der Zeit zurückgehen und die Unordnung an diesem Punkt in der Geschichte beheben, als sie eingeführt wurde, und dann den Schmerz der Korrektur der nachfolgenden Änderungen durchgehen (die im richtigen Einrückungsstil überarbeitet werden müssen). Für die Mühe, enden Sie mit einer sauberen Geschichte.

0

Es ist vollkommen gültig. Das Koppeln einer Leerraumreformatierung mit anderen Änderungen in der gleichen Datei könnte die Nicht-Leerraumänderungen verschleiern. Das Commit trägt die alleinige Verantwortung, den Leerraum neu zu formatieren.