Was ist der richtige Weg, um Commit-Daten in Git zu überprüfen?

13

Mein Ziel ist es, Festschreibungsdaten zu überprüfen, die bestimmte Anforderungen nicht erfüllen, und dann entweder die erstellte Festschreibung abzulehnen oder an das Remote-Repository weiterzuleiten.

Das Problem beim Ausführen eines Pre-Commit-Hooks besteht darin, dass die Bereitstellung für viele Benutzer schwierig ist, die ihre Pre-Commit-Hook-Datei manuell aktualisieren müssen. Außerdem erlaubt Git nicht, dass Sie Submodule im .git-Ordner haben, was für die Bereitstellung leider sehr einfach gewesen wäre.

Die andere Option, die ich sehe, ist das Einchecken des Update-Hooks auf der Remote-Seite, der jedes Commit überprüft, das von einem Entwickler gepusht wird, und das Pushen ablehnt, wenn eines der Commits die Tests nicht besteht.

Hat jemand einen Einblick in dieses Problem? Und wenn ja, können Sie mir ein Beispiel für ein Update-Hook-Skript bereitstellen oder darauf hinweisen? Ich bin ein wenig verwirrt, wie es funktioniert.

Dalanmiller
quelle
4
Dies ist eine großartige erste Frage.
Daenyth

Antworten:

7

Sie müssen zuerst herausfinden, ob Sie nicht möchten, dass der unqualifizierte Code festgeschrieben oder zurück in den Upstream verschoben / veröffentlicht wird.

Meiner Meinung nach ist die spätere praktikabler.

mit einem DVCS wie git. Sie möchten nicht wirklich steuern, wie jeder Entwickler sein lokales Repository verwendet. und Sie können nicht wirklich die Kontrolle darüber haben.

Ein Pre-Commit-Hook funktioniert gut als grundlegende Validierung und Desinfektion, wenn alle Beteiligten ihn freiwillig akzeptieren. Das setzen wir in unserem Unternehmen tatsächlich locker durch. es kann jedoch immer mit übersprungen werden git commit --no-verify.

Der serverseitige Hook greift hingegen nicht in den lokalen Arbeitsablauf eines Programmierers ein und stellt sicher, dass andere im Projekt ihre Arbeit nur auf Code stützen, der bestimmte Kriterien erfüllt. Normalerweise ist dies das, wonach die Leute suchen, wenn sie automatische Prüfungen durchführen.

Diese automatische Validierung ersetzt vermutlich nicht die Qualitätskontrolle, die normalerweise durch Codeüberprüfung oder Paarprogrammierung erreicht wird.

Wenn Sie mit Github vertraut sind , werden Sie feststellen, dass "Pull Request" ein weiterer Ansatz für dieses Problem ist. Viele Open-Source-Projekte und -Unternehmen verwenden die Pull-Anfrage von Github für die Kontrolle von Zweigstellenberechtigungen und die Codeüberprüfung. Aber es bedarf menschlicher Interaktion und ist möglicherweise nicht das, wonach Sie fragen.

Huang Tao
quelle
1

Wie Sie bereits betont haben, ist dies auf dem Client zwar technisch möglich, aber wahrscheinlich nicht praktikabel. Viele Git-Benutzer machen vorübergehende Arbeiten, sodass eine drakonische Überprüfung jedes Commits kontraproduktiv ist.

Die Standardlösung wäre ein serverseitiger Hook. Sie haben wahrscheinlich einen pre-receiveHook eingerichtet, der jedes Mal ausgeführt wird, wenn ein Push eingeht, und der den Push ablehnen kann, wenn er möchte. Der Rest hängt von den genauen Prüfungen ab, die Sie durchführen möchten.

Dies wird in Pro Git , Kapitel 7.3 Anpassen von Git - Git Hooks erklärt .

sleske
quelle
Vielen Dank für Ihre Antwort und ich liebe die neue Git-Website wirklich. Mein einziges Problem ist, dass es schwierig ist, eigene Commit-Hooks zu schreiben, vor allem, weil Sie nicht genau wissen, wo Sie sich gerade befinden und worauf Sie achten sollten. Wenn ich versuche, einen Pre-Receive-Hook zu schreiben, gehe ich dann davon aus, dass die Fernbedienung einen Tracking-Zweig für das hat, was ich drücke? Wie soll ich wissen? Ich wünschte, es gäbe so eine Art von Git-Funktion, mit der Sie simulieren könnten, was Sie zu diesem Zeitpunkt haben.
Dalanmiller