git
Verwenden Sie zum automatischen Ausführen von Dingen Haken
Du willst \thing{}
mit jedem git Commit machen? Dafür ist ein Haken . Zum Beispiel der post-commit
Haken:
Nachdem der gesamte Commit-Vorgang abgeschlossen ist, wird der Post-Commit-Hook ausgeführt. Es sind keine Parameter erforderlich, aber Sie können den letzten Commit durch Ausführen einfach abrufen
git log -1 HEAD
. Im Allgemeinen wird dieses Skript für Benachrichtigungen oder ähnliches verwendet.
von der GIT SCM Website / Anleitung
Hinzufügen eines Datums mit jedem git commit
Dies ist der unkomplizierte Teil. Mit diesem Haken können Sie ganz einfach den ersten Teil Ihrer beiden Ziele erreichen:
- Verwenden Sie
git diff-tree --no-commit-id --name-only -r HEAD
diese Option, um die Dateien in der aktuellen Version zu ändern (siehe Erklärung zu SO ). - iterieren Sie diese Dateien in der Sprache Ihrer Wahl und setzen Sie das Datum mit dem gewünschten Werkzeug ein, z. B. mit
sed
oderawk
Wenn Sie dies lokal tun, bleiben geänderte nicht gespeicherte Dateien in Ihrer Arbeitskopie erhalten. dh git status
zeigt geänderte Dateien an . Möglicherweise möchten Sie dies vermeiden, indem Sie wie unten beschrieben ein zusätzliches Repo verwenden.
Hinzufügen einer Version mit jedem git tag
Das ist etwas kniffliger.
Sie könnten die Tatsache git tag
umgehen, dass keine Hooks ausgelöst werden, indem Sie ein git-Repo für Zwischenstufen verwenden - entweder lokal oder remote - und git push
zu diesem Repo bei jedem Tag. Sie könnten dann einen post-update
Hook auf diesem Server verwenden, um das neueste Tag entsprechend neu zu schreiben.
Zum Beispiel:
- Den neuesten Tag / Versionsnamen abrufen:
git describe --tags $(git rev-list --tags --max-count=1)
- Formatieren Sie die Dateien mit
sed
(awk
oder mit welchem Tool). - Laden Sie von diesem Verzeichnis aus nach CTAN
Kann ich das nicht mit einem anderen Haken machen?
Es ist möglich, zu erkennen, ob ein Schiedsrichter einen Tag durch die Verwendung hat git describe
, zum Beispiel:
# In a working git repo $ git tag -a "test1" -m "test tag" $ git describe --exact-match HEAD test1 $ git describe --exact-match HEAD^1 fatal: no tag exactly matches 'f8a1d888151809ccfbb3460bbcf310541967e292' 128
Die Verwendung git tag
löst jedoch keinen commit
Hook aus.