Fügen Sie mit git Datum und Tag-Namen in die LaTeX-Quelldateien ein

486
aloneprism

Ich verwende git zum Schreiben einiger LaTeX-Pakete. Um die Funktionen der LaTeX-Version nutzen zu können, muss in jedem Paket eine Zeichenfolge des folgenden Formats enthalten sein:

\ProvidesPackage[yyyy/mm/dd VersionNumber SomeText] 

Ich vergesse oft, das Datum und die Versionsnummer zu aktualisieren, bevor ich die Dateien in CTAN hochlade. Ich habe mich gefragt, ob mit git dies automatisiert werden kann.

Ich suche eine Methode um:

  1. Das aktuelle Datum wird bei jedem Commit automatisch in den Quellcode eingefügt, und zwar nur für die in diesem Commit geänderten Dateien

  2. füge automatisch das aktuelle Datum und die aktuelle Versionsnummer in alle Dateien ein, wenn ich eine Version tagge (der Tag-Name stimmt mit der Versionsnummer überein)

2

1 Antwort auf die Frage

1
bertieb

gitVerwenden 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-commitHaken:

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:

  1. Verwenden Sie git diff-tree --no-commit-id --name-only -r HEADdiese Option, um die Dateien in der aktuellen Version zu ändern (siehe Erklärung zu SO ).
  2. iterieren Sie diese Dateien in der Sprache Ihrer Wahl und setzen Sie das Datum mit dem gewünschten Werkzeug ein, z. B. mit sedoderawk

Wenn Sie dies lokal tun, bleiben geänderte nicht gespeicherte Dateien in Ihrer Arbeitskopie erhalten. dh git statuszeigt 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 tagumgehen, dass keine Hooks ausgelöst werden, indem Sie ein git-Repo für Zwischenstufen verwenden - entweder lokal oder remote - und git pushzu diesem Repo bei jedem Tag. Sie könnten dann einen post-updateHook auf diesem Server verwenden, um das neueste Tag entsprechend neu zu schreiben.

Zum Beispiel:

  1. Den neuesten Tag / Versionsnamen abrufen: git describe --tags $(git rev-list --tags --max-count=1)
  2. Formatieren Sie die Dateien mit sed( awkoder mit welchem ​​Tool).
  3. 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 taglöst jedoch keinen commitHook aus.

Fantastische Antwort mit sehr guter Erklärung! Danke vielmals! aloneprism vor 5 Jahren 0