2015-12-04 10 views
7

Ich verwende dieses Shell-Skript, wenn ich eine git commit -m "msg" schreibe, die das Commit-Protokoll in eine PHP-Datei schreibt. Ich möchte, dass es auch die aktuelle Commit-Nachricht enthält, die ich gerade mache.Verwenden eines Git-Hooks zum Erstellen eines Commit-Protokolls und Hinzufügen zum aktuellen Commit

Mein Shell-Skript:

#!/bin/sh 
path="path/to/gitlog.php" 
echo "<?php $git_log = array(" > $path 
git log --date=iso --pretty=format:'array("%h","%an","%ad","%s"),' >> $path 
echo ");" >> $path 

Die gitlog.php meinen Repository gespeichert werden, die ich dann git push.

Ich habe es derzeit in 'Pre-Commit' Hook, gibt es eine Möglichkeit, die verbindliche Nachricht innerhalb dieses Hooks zu bekommen?

Mein Anwendungsfall

Ich bin der einzige Entwickler im Projekt. Die Zeit drängt! Es ist für andere, die an dem Projekt beteiligt sind, Fortschritte zu sehen und die beschreibenden Commit-Logs zu lesen, ohne dass ich den Aufwand verdoppeln muss. Das Protokoll wird in einem Dashboard ausgegeben, auf das jeder zugreifen kann.

Git nicht läuft auf dem Armaturenbrett-Server und Dateien werden von einem Repository-Hosting-Unternehmen (Bohnenstange) eingesetzt

+0

Ein Pre-Commit-Hook wird vor dem Commit ausgeführt, sodass er das Commit möglicherweise nicht enthalten kann. Sie können ein neues, zusätzliches Commit * nach dem Commit machen * und Sie können sogar festlegen, dass das neue Commit ein anderes Parent hat als das letzte Commit (so funktioniert 'git commit --amend'), aber Sie können das bestehende Commit nicht ändern. Wenn Sie versuchen, Versionsinformationen einzubeziehen, besteht die übliche Methode mit git darin, diese Datei außerhalb von git zu belassen, insbesondere wenn die gesamte Datei aus einem Commit generiert wird (wie dies der Fall wäre). Um ein altes Commit anzuzeigen, checken Sie es aus und führen dann Ihre "generate version" aus. – torek

+0

@torek, thks - Gibt es keinen Hook, der aufgerufen wird, bevor das eigentliche Commit ausgeführt wird, und die Nachrichtendaten übergeben werden, die ich die Commit-Nachricht und das Datum manuell an das Protokoll anhängen kann, führen Sie das 'git add' erneut aus. " und endlich mit dem Commit fortfahren? – digout

+0

Aha, ja, da ist der 'commit-msg'-Haken. Sie können die Nachricht ändern (für Formatierungsstandards) oder das Commit ablehnen, wenn die Nachricht falsch ist. Ich habe diesen Haken nie selbst benutzt, aber er läuft am richtigen Punkt im Commit-Prozess. Ich würde empfehlen, 'git add 'nicht zu machen (das könnte Dateien hinzufügen, die absichtlich modifiziert aber nicht inszeniert werden), aber' git add $ path' könnte hier gut funktionieren. (Ich würde allerdings empfehlen, mit Commits bestimmter Dateien zu testen, und/oder 'git commit -a', um zu sehen, ob es genau dort funktioniert.) – torek

Antwort

0

Ihres Anwendungsfall gegeben, würde ich vorschlagen:
bewegen Sie Ihren pre-commit Haken auf dem lokalen Computer zu dem post-checkout Haken auf dem Armaturenbrett-Server (ich dort vorstellen, ist ein Klon des Repo hinter dem Armaturenbrett Seite?)

+0

Nein, die Dateien werden auf dem Dashboard-Server von einem Repo-Hoster bereitgestellt (Beanstalk) – digout

1

eine weitere Option könnte sein, einen geeigneten Haken zu schaffen, die das Changelog auf eine Datei außerhalb Ihre Repo schreibt, und dann schiebt die Datei an eine Stelle, auf die externe Benutzer zugreifen können . Keine Notwendigkeit, das Changelog dann zu committen, was die Ursache von Problemen ist.

Verwandte Themen