Ich denke darüber nach, einen Cron-Job zu erstellen, der Code auscheckt, Code-Formatierer darauf ausführt und, wenn sich etwas ändert, die Änderungen festschreibt und zurückschiebt.
Bei den meisten Projekten, die Autoformatierer verwenden, werden diese in einen Git-Hook eingefügt. Wenn Sie dies jedoch alle paar Stunden automatisch tun, müssen die Entwickler den Git-Hook nicht mehr installieren.
Ich würde dennoch jeden ermutigen, sauberen, gut formatierten Code zu schreiben, und vielleicht kann ich das System veranlassen, Entwickler automatisch anzupingen, wenn der von ihnen geschriebene Code neu formatiert wird, damit sie wissen, was sie in Zukunft tun sollen.
coding-style
automation
großblind
quelle
quelle
Antworten:
Klingt nett, aber ich würde es vorziehen, Leute zu haben, die für Codeänderungen verantwortlich sind, nicht Bots.
Außerdem möchten Sie unbedingt sicherstellen, dass diese Änderungen nichts kaputt machen. Zum Beispiel haben wir eine Regel, die Eigenschaften und Methoden alphabetisch sortiert. Dies kann Auswirkungen auf die Funktionalität haben , z. B. auf die Reihenfolge der Daten und Methoden in WSDL-Dateien von WCF-Verträgen.
quelle
git blame
ist nicht nur zu finden, wessen Fehler ein Fehler ist, sondern es ist auch das Festschreiben zu finden, wenn etwas hinzugefügt / entfernt wurde, was aus einer Reihe von Gründen nützlich sein kann.Ich würde stattdessen versuchen, es jedem im Team wirklich leicht zu machen, die automatische Code-Formatierung gemäß dem Standard Ihres Teams direkt in Ihrem Editor oder Ihrer IDE auf die aktuelle Quellcode-Datei (oder ausgewählte Teile davon) anzuwenden . Dies gibt Ihren Teammitgliedern mehr Kontrolle darüber, wie und wann die Formatierung erfolgt. Lassen Sie sie den Code untersuchen, bevor er im endgültigen Formular festgeschrieben wird, und testen Sie ihn nach der Formatierung , nicht zuvor.
Wenn alle oder die meisten Ihrer Teammitglieder denselben Editor verwenden, sollte dies nicht zu schwierig sein. Wenn jeder einen anderen Ansatz verwendet, ist Ihr Ansatz möglicherweise die zweitbeste Lösung, sofern das Team dies unterstützt. Ich empfehle Ihnen jedoch, zusätzliche Sicherheitsmaßnahmen zu installieren, z. B. nächtliche Builds und automatisierte Tests, die nach jeder automatischen Codeänderung ausgeführt werden.
quelle
Das ist eine schlechte Idee, nicht nur, weil es die Leute davon abhält, anständigen Code zu schreiben, sondern auch, weil die Neuformatierung als Codeänderung in Ihrem VCS angezeigt wird (Sie verwenden hoffentlich eine) und den historischen Fluss der Codeentwicklung maskiert. Schlimmer noch, jede Code-Formatierungsaktion (in der Tat jede Änderung am Code überhaupt) hat die Möglichkeit, Fehler einzuführen, sei es manuell oder automatisiert. Ihr Formatierer kann nun Fehler in Ihren Code einfügen, die möglicherweise erst Monate später Codeüberprüfungen, Komponententests, Integrationstests usw. durchlaufen.
quelle
Ich würde eher glauben, dass es eine gute Idee ist (automatisch Code-Formatierer auszuführen), aber das ist nur meine Meinung.
Ich werde sie nicht regelmäßig ausführen, aber wenn möglich, bevor die Versionskontrolle festgeschrieben wird.
Bei git wäre ein Pre-Commit-Hook sinnvoll. In vielen C- oder C ++ - Projekten, die mit Makefile erstellt wurden , füge ich ein
indent
Ziel hinzu (das in geeigneter Weise Code-Formatierer wieindent
oder ausführtastyle
) und erwarte, dass Mitwirkendemake indent
regelmäßig ausgeführt werden. Übrigens können Sie sogar einigemake
Regeln hinzufügen , um sicherzustellen, dass die Git-Hooks installiert wurden (oder um sie zu installieren).Aber eigentlich ist es eher ein soziales als ein technisches Problem . Sie möchten, dass Ihr Team sauberen und gut formatierten Code schreibt, und das ist eine soziale Regel Ihres Projekts. (Es gibt nicht immer eine technische Antwort auf jedes soziale Problem).
Die Versionskontrolle ist meistens ein Hilfsmittel für die Kommunikation zwischen menschlichen Entwicklern (einschließlich Ihres eigenen Selbst in einigen Monaten). Ihre Software benötigt keine VC oder Formatierung, Ihr Team jedoch.
Übrigens haben verschiedene Communities und verschiedene Programmiersprachen unterschiedliche Ansichten zur Code-Formatierung. Zum Beispiel hat Go nur einen Code-Formatierungsstil, aber C oder C ++ haben viele davon.
quelle
Ich halte das für eine schlechte Idee. Viele der Antworten deckten bereits ab, dass es die Geschichte beschmutzt, indem es es schwierig macht, herauszufinden, wer tatsächlich eine Zeile hinzugefügt hat, und dass es die Leute ermutigt, einfach alles zu begehen, und der Format-Bot wird damit umgehen.
Ein besserer Ansatz wäre es, einen Format-Checker in Ihr Build-Tool zu integrieren. (In Java gibt es Checkstyle. ) Erlauben Sie den Benutzern dann nur, ihre Zweige mit dem Hauptzweig zusammenzuführen, wenn der Build erfolgreich ist (einschließlich der Formatierung).
Wenn Sie zulassen, dass Benutzer direkt in den Hauptzweig übertragen (z. B. in Subversion), müssen Sie weiterhin sicherstellen, dass alle Benutzer die Disziplin haben, nur formatierten Code zu übertragen (oder dass der Server die Übertragungen erst akzeptiert, nachdem einige Überprüfungen durchgeführt wurden) ).
quelle
Im Allgemeinen halte ich es für eine schlechte Idee. Im Prinzip ist es eine gültige Idee, aber in der Realität kann es problematisch sein. Wenn der Code-Formatierer Ihren Code kaputt macht, ist dies eine echte Möglichkeit, und es dauert nur einen Formatierungslauf, bis Ihre Entwickler mit (wahrscheinlich gerechtfertigter) Feindseligkeit reagieren (z. B. "Ihr mieser Code-Formatierer hat den Build gebrochen, schalten Sie ihn jetzt aus! " ).
Entsprechend der Empfehlung von @ BasileStarynkevitch verwenden wir serverseitige Post-Receive-Hooks von Git, um "Beratungs-E-Mails" über den Codestil zu senden.
Wenn ich ein Commit übermittele, das Stilverstöße enthält, sendet mir der Git-Ursprungsserver eine E-Mail, in der ich darüber informiert werde, dass ich gegen die Stilrichtlinien verstoßen habe, und empfiehlt, dass ich meinen Code korrigiere. Dies wird jedoch nicht erzwungen, da es möglicherweise triftige Gründe für einen Bruch des House-Stils gibt (z. B. lange Zeichenfolgen, die die maximale Zeilenlänge überschreiten).
Wenn es sich um ein systembedingtes Problem handelt, das die Codebasis schädigt, ist es möglicherweise an der Zeit, Codestilprobleme in Codeüberprüfungen zur Sprache zu bringen. Ein schlechter Codestil kann Fehler maskieren und das Lesen des Codes erschweren, sodass es sich möglicherweise um ein gültiges Problem bei der Codeüberprüfung handelt.
Um den Aspekt des "sozialen Problems" der Dinge zu ergänzen, kann es sich lohnen, die Menschen zu ermutigen, kosmetische und stilistische Mängel zu beheben, sobald sie sie finden. Wir haben die Standard-Festschreibungsmeldung "Cosmetic". Korrekturen im Codestil, von denen andere Entwickler wissen, dass sie keine wesentlichen Änderungen enthalten.
Wie @DocBrown sagt, besteht eine andere Option darin, den Codestil in Ihrer IDE zu erzwingen. Wir verwenden CodeMaid mit Visual Studio, um viele häufig auftretende Stilfehler zu korrigieren. Es wird beim Speichern der Codedateien ausgeführt, was bedeutet, dass schlecht gestalteter Code niemals in das Repository gelangen sollte ... theoretisch :-).
quelle
Ja, ich denke es ist eine schlechte Idee. Versteht mich nicht falsch, der Grund dafür klingt großartig, aber das Ergebnis könnte immer noch schrecklich sein.
Sie werden Zusammenführungskonflikte haben, wenn Sie einen verfolgten Zweig ziehen, zumindest fürchte ich, dass dies der Fall ist, aber ich könnte mich irren.
Ich möchte es im Moment nicht bei der Arbeit testen, aber Sie sollten es selbst ausprobieren.
Tatsächlich können Sie einfach einen aktuellen Commit auschecken. Erstelle eine neue Filiale, lege etwas Kleinliches fest, wähle etwas aus oder verschmelze ohne Autocommit.
Führen Sie dann Ihr Skript aus, ziehen Sie und wenn Ihr Ergebnis ein schreckliches Zusammenführungs-Durcheinander ist, sollten Sie dies definitiv nicht bei Tageslicht tun.
Stattdessen können Sie möglicherweise einen nächtlichen oder einen wöchentlichen Build erstellen.
Aber auch ein nächtlicher könnte eine schlechte Idee sein.
Sie können es entweder wöchentlich ausführen, wenn Sie sicher sind, dass keine Zusammenführungskonflikte auftreten, da alles am Montag beendet ist.
Andernfalls führen Sie es 1-2 Mal pro Jahr in der Ferienzeit aus, wenn keine Zusammenführungskonflikte auftreten.
Die Lösung hängt jedoch möglicherweise von Ihrer Priorität für den Codestil ab.
Ich denke, dass ein Setup-Skript, das automatisch das Git-Repository erstellt und die Haken für das Projekt setzt, besser wäre.
Oder Sie fügen das Hook-Setup-Skript in einen Ordner für Ihre Entwickler im Projekt ein und checken es einfach in git ein.
quelle
Was ich nicht erwähnt habe, ist die Tatsache, dass es manchmal legitime Gründe gibt, etwas nicht gemäß einer Reihe von Regeln zu formatieren. Manchmal wird die Klarheit des Codes verbessert, indem man gegen eine vorgegebene Richtlinie verstößt, die in 99% der Fälle sinnvoll ist. Die Menschen müssen diesen Anruf tätigen. In diesen Fällen würde die automatische Code-Formatierung dazu führen, dass die Inhalte weniger lesbar werden.
quelle
Das ist eine schreckliche Idee.
Wenn einer meiner Entwicklerkollegen unentgeltlich Änderungen an den Quelldateien vornimmt, besteht er keine Codeüberprüfung. Es macht einfach das Leben für alle schwerer. Ändern Sie den Code, der geändert werden muss, sonst nichts. Sinnlose Änderungen führen zu Zusammenführungskonflikten, die zu Fehlern führen können, und verursachen nur sinnlose Arbeit.
Wenn Sie dies regelmäßig tun möchten, ist das einfach schrecklich.
Und dann ist da noch die Frage, welche Art von Änderungen der Code-Formatierer vornimmt. Ich verwende die automatische Formatierung in meinem Editor, sie funktioniert recht gut und ich kann Dinge verbessern, wenn die automatische Formatierung nicht perfekt ist. Wenn Sie einen Code-Formatierer verwenden, der darüber hinausgeht, werden Sie den Code nicht verbessern, sondern ihn verschlimmern.
Und dann ist da noch das soziale Problem. Es gibt Leute, die jeden dazu zwingen wollen, ihren Codestil zu verwenden, und es gibt flexiblere Leute. So etwas würde wahrscheinlich der Entwickler-Typ "Grammer-Nazi" vorschlagen, der seinen Stil allen anderen aufzwingen will. Erwarten Sie eine Gegenreaktion und erwarten Sie, dass die flexiblen, normalerweise unkomplizierten Entwickler ihren Fuß nach unten setzen.
quelle
Sie erwähnen das von Ihnen verwendete VCS nicht, aber abhängig davon besteht eine andere Option darin, einen serverseitigen Hook zu haben. Ein VCS wie git unterstützt das. Sie können einen Server-Hook installieren, der den Formatierer für die gepushte Version ausführt und dann die formatierte Datei mit der gepushten Version vergleicht. Wenn sie sich unterscheiden, hat der Entwickler nicht die richtige Formatierung verwendet und der Server kann den Push ablehnen. Dies würde Ihre Entwickler dazu zwingen, nur Code mit der gewünschten Formatierung zu pushen, was sie dazu ermutigt, sauberen Code von Anfang an zu schreiben. Dies würde die Entwickler dafür verantwortlich machen, den korrekt formatierten Code getestet zu haben und Ihre Entwickler von der manuellen Installation einer Clientseite befreien Haken.
quelle
go fmt
wird automatisch abgelehnt.Es ist ein Kompromiss zwischen einem saubereren Code-Format und einer genaueren und besser verständlichen Git-Geschichte. Hängt von der Art Ihres Projekts ab und davon, wie oft Sie in die Git-Geschichte eintauchen oder die Schuld dafür geben, dass Sie verstehen, was los ist. Wenn Sie an etwas Neuem arbeiten und nicht auf Abwärtskompatibilität achten müssen, spielt die Historie normalerweise keine so wichtige Rolle.
quelle
Diese Idee ähnelt einigen anderen Antworten, aber ich kann meine Vorschläge nicht kommentieren.
Eine Möglichkeit besteht darin, einen Alias (oder Hook oder was auch immer) für die Festschreibungsfunktion festzulegen, mit der der Code-Formatierer für den zu festschreibenden Code ausgeführt wird, bevor er festgeschrieben wird.
Es kann 2 (oder mehr) Ergebnisse geben:
1) Zeigen Sie dem Benutzer die vorgeschlagenen Änderungen und bitten Sie ihn um Zustimmung, um die Änderungen zu übernehmen und zu übernehmen.
2) Ignorieren Sie die vorgeschlagenen Änderungen und übernehmen Sie den ursprünglichen Code.
Sie können diesen Optionen auch mehr Flexibilität verleihen, z. B. die Möglichkeit, die in Option 1 vorgeschlagenen Änderungen zu bearbeiten. Eine weitere Idee (je nachdem, wie sehr Sie diese Codierungsstandards vorantreiben möchten) besteht darin, dass das System Ihnen einen Bericht sendet, wenn Option 2 ist ausgewählt.
Dies kann eine gute Balance sein, um den gesamten Code nach Belieben automatisch zu überprüfen und den Entwicklern dennoch die Flexibilität zu geben, ihre Anforderungen zu erfüllen. Es erlaubt auch die Option, Code mit Formatierungsunterschieden, wie in anderen Antworten erwähnt, nicht automatisch abzulehnen. Mit 'Ich habe automatische Formatierungskorrekturen überprüft und genehmigt; Commit-Option, die persönliche Verantwortung für die Arbeit der einzelnen Entwickler bleibt erhalten
quelle
Ich mache es nicht im Repository, aber ich mache es beim Speichern, wenn das Tool es unterstützt. Eclipse ist eine und zusätzlich würde ich die Codebereinigung einschließlich der Sortierung durchführen.
Das Schöne ist, dass es Teil des Projekts ist, so dass jeder Entwickler es für sein Projekt bekommen wird.
Als zusätzlichen Bonus würden Zusammenlegungen erheblich vereinfacht, da die Dinge nicht herumspringen werden.
Code-Überprüfungen verhindern fehlerhafte.
Ein anderer Ort, an dem ich es tun würde, ist, es Teil des Builds zu haben. In meinem Fall habe ich es so, dass maven builds das XML neu formatiert und pom-Dateien aufräumt und den Code neu formatiert.
Auf diese Weise werden alle Entwickler, die zum Push bereit sind, für ihre Pull-Anforderung bereinigt.
quelle