(Der Einfachheit halber) Ich habe einen master
Zweig und einen dev
in meinem Git-Repo. Ich möchte sicherstellen, dass die master
Filiale immer funktioniert, daher sollte sich meine gesamte Arbeit in der dev
Filiale befinden.
Wenn ich jedoch meine Änderungen mit einer --no-ff
Zusammenführung zusammenführe, bleibe ich in der Regel in der master
Zweigstelle und arbeite einfach weiter darin (weil ich vergessen habe, meine dev
Zweigstelle auszuchecken ).
Kann ich eine Regel für den master
Zweig festlegen, die besagt, dass ich keine Commits ausführen und Zusammenführungen vorspulen kann, sondern nur --no-ff
von einem anderen Zweig?
Dies muss für privat gehostete Repositorys funktionieren (also nicht GitHub und BitBucket).
git
merge
fast-forward
Rasmus Bækgaard
quelle
quelle
git commit
machen ein neues, es findet kein schneller Vorlauf statt. Es hört sich so an, als ob Sie normale Commits nur verbieten möchten, wenn der aktuelle Zweigmaster
in diesem Fall in denpre-commit
Hook schaut .Antworten:
Ja, es ist möglich. Sie müssen einen Pre-Commit-Hook erstellen, der Commits an den Hauptzweig ablehnt. Git ruft beim Aufrufen des Merge- Befehls keinen Pre-Commit-Hook auf , daher lehnt dieser Hook nur reguläre Commits ab.
Erstellen Sie die Datei .git / hooks / pre-commit mit folgendem Inhalt:
Machen Sie es ausführbar (unter Windows nicht erforderlich ):
Um Schnellvorlaufzusammenführungen zu deaktivieren , müssen Sie Ihrer .git / config- Datei außerdem die folgende Option hinzufügen :
Wenn Sie auch den Hauptzweig auf Ihrer Fernbedienung schützen möchten, überprüfen Sie diese Antwort: So beschränken Sie den Zugriff auf den Hauptzweig auf git
quelle
master
Zweig im Pre-Push-Haken drücken. Beispiel: gist.github.com/aaronhoffman/ffbfd36928f9336be2436cffe39feaecSie können dazu das Pre-Commit- Dienstprogramm verwenden. Es verfügt über einen integrierten
no-commit-to-branch
Haken, mit dem Commits für einen oder mehrere Zweige verhindert werden können.Installieren
Der grundlegende Einrichtungsprozess ist:
.pre-commit-config.yaml
Datei im Stammverzeichnis Ihres Projekts (siehe unten für einen ersten Entwurf)pre-commit install
.Grundkonfiguration zum Schutz von Zweigen
Hier ist eine grundlegende Konfiguration, die nur den
no-commit-to-branch
Hook enthält:repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v3.3.0 hooks: - id: no-commit-to-branch args: ['--branch', 'master']
Wenn Sie mehrere Zweige schützen möchten, können Sie mehrere
--branch
Argumente in die Argumentliste aufnehmen:repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v3.3.0 hooks: - id: no-commit-to-branch args: ['--branch', 'master', '--branch', 'staging']
Ist das nicht alles übertrieben?
Pre-Commit verfügt über viele andere integrierte Hooks und eine große Sammlung von Community-Built-Hooks , die die Art und Weise, wie Sie Ihre Commits bereinigen und validieren, verändern. Der Grund, warum ich dies erwähne, ist, dass dieses Tool zwar übertrieben ist, um nur Commits für einen geschützten Zweig zu verhindern, aber viele andere Funktionen aufweist, die es zu einer überzeugenden und einfachen Ergänzung für jedes Git-Projekt machen.
quelle
Es kann sinnvoll sein, es global über zu installieren
und Verschieben dieser
pre-commit
Datei in dieses Verzeichnisquelle
master
zuProduction
- können Ausnahmen gemacht werden?