Ich bin gerade dabei, diesen .NET-Shop von svn auf git zu verlagern, und habe einige Hilfsprobleme identifiziert, für die ich eine Lösung haben möchte, bevor wir den Schalter umlegen.
Die Frage, die ich in dieser Frage speziell stelle, ist die Durchsetzung von Zeilenenden. Standardmäßig wird git für Windows mit dem Befehl 'checkout crlf, commit lf' installiert, was für eine Reihe von Quellen, die (soweit mir bekannt ist) ausschließlich aus crlf-Endungen bestehen, nicht funktioniert.
Ich weiß nicht, dass ich blind einem bestimmten Entwickler vertrauen würde, um diese selbst gegebene Anweisung richtig zu konfigurieren, also überlege ich mir eine (oder beide) der folgenden Möglichkeiten, war aber neugierig, ob jemand hier einen anderen Weg gegangen ist.
- Ein Pre-Commit-Hook, der nach lf-Zeilenenden (oder allen lf-Zeilenenden) sucht und in diesem Fall zurückweist.
- Ein Installationsskript, das an devs verteilt wird und das die globale Konfiguration mit "as-is, as-is" auffüllt.
PS Beim Schreiben dieses Artikels ist mir aufgefallen, dass die anfängliche Konvertierung von svn nach git die Standardmethode übernehmen könnte, und solange die Leute an der Standardmethode festhalten, wäre das auch ziemlich nahtlos. Nachdem ich ein Entwickler von Git in einem .NET-Shop war, der Git mit dem nicht standardmäßigen Status "as-is, as-is" installiert hat, habe ich dort auch meine eigenen Probleme erstellt (alle hatten vor meiner Ankunft den Standardwert geändert). . Also neige ich immer noch zu einer Art Durchsetzungsmechanismus.
Antworten:
Um die Frage zu beantworten, wie etwas lokal durchgesetzt werden kann, müssen Sie den Status jeder Entwickler-Workstation sorgfältig verwalten und durchsetzen, und ich bin normalerweise der Meinung, dass Entwickler wahrscheinlich lokale Administratoren für ihre Entwicklung sein sollten Maschine, denn wenn sie es nicht sind, werden sie nur ihre Zeit damit verbringen, herauszufinden, wie wir diese Privilegien erhalten können.
Und das liegt wahrscheinlich daran, dass Sie sich nicht um den Status der lokalen Konfiguration kümmern müssen, wenn Sie die verteilte Versionskontrolle verwenden. Sie sollten sich nur um den Status Ihrer Konfiguration kümmern . Angenommen, Sie verwenden git als zentrales Versionskontrollsystem, da dies im Grunde genommen sowieso jeder tut, weil es am einfachsten ist, dann nehmen wir einfach an, dass "Ihre" Konfiguration die Kopie des Codes ist, der auf dem zentralen Server gespeichert ist.
Wenn dies der Fall ist, sollten Sie Zusammenführungen nicht akzeptieren, die, wie Sie bereits erwähnt haben, crlf / lf-Zeilenenden unterbrechen. Sie erzwingen dies also, wenn ein anderer Client versucht, Änderungen zu pushen, indem Sie eine serverseitige Logik verwenden, die die Anforderung ablehnt, Ihr Repo mit ihren möglicherweise brechenden Stiloptionen zu belasten .
quelle
Wir benötigen einen Überprüfungsprozess mit Pull Requests in Github für unsere Hauptentwicklungs- oder Hauptzweige. Während dieses Überprüfungsprozesses markieren wir Pull-Anforderungen als änderungsbedürftig, wenn viele Dateien Leerzeichen oder Zeilenendungsunterschiede aufweisen, und bestehen darauf, dass sie der Formatierung des Dev- oder Master-Zweigs folgen, für den sie die Pull-Anforderung erstellen.
Es gibt auch einige nützliche Tools, die davon abhängen, welche Sprachen Sie verwenden und welche CI-Tools Sie verwenden. Während des Erstellungsprozesses oder des Pull-Request-Schritts kann der Code basierend auf den von Ihnen festgelegten Regeln automatisch formatiert werden. Dies hilft auch dabei, den Code konsistent zu halten und Formatierungsprobleme beim Festschreiben von Code zu minimieren.
quelle
Sie können die Konfiguration pro Repository verwenden , um die Konfiguration des Benutzers pro Repository zu überschreiben. Wenn das Repo als zentrale Quelle betrachtet wird, sollte es sich mit Klonen verbreiten und auf andere Repos übertragen, einschließlich lokaler Repos, wodurch die lokale Konfiguration zentral überschrieben wird.
Sie können dies durch Haken in Ihrem zentralen Repository weiter erzwingen , um zu überprüfen, ob die Dateienden so sind, wie sie sein sollen, und das Zusammenführen / Verschieben abzulehnen, falls es nicht koscher sein sollte. Diese Hooks werden jedoch nicht mit dem Repo geklont, zumindest nicht direkt, aber dies ist nicht erforderlich, da die Regeln nur wirklich auf dem zentralen Repo erzwungen werden müssen.
Mithilfe von Vorlagen in Ihrem git init können Sie sicherstellen, dass Ihre Repos mit allen gitignore-, gitattributes-Dateien usw. identisch sind, so wie Sie es möchten.
Als letztes, das nicht direkt mit Ihrer Frage zusammenhängt, fand ich den größten Reibungspunkt, als ich svn saavy team zu einem git-basierten Workflow führte, um sie an das zusätzliche Repo in der Mitte zu gewöhnen. Ich fand heraus, dass dieses visuelle Cue-Sheet ein wenig dazu beitrug, zu erklären, welcher Befehl welchen Effekt auf welchen Teil hatte.
Hoffe das hat ein bisschen geholfen.
quelle