LaTeX und Git - Git Information in LaTeX-Dokumenten verwenden
Git-Informationen, wie Branch, Tags, etc. lassen sich automatisch in LaTeX-Dokumenten übernehmen und anzeigen.
Codeberg
--8<-- "docs/assets/banners/latex-banner.md
Da es durchaus sinnvoll ist bei der Erstellung von (großen) und wichtigen Dokumenten eine Versionsverwaltung, wie z.B. Git, zu verwenden, können diese Informationen auch auf das PDF-Dokument gedruckt werden.
Das ermöglicht einen zuverlässigen Audit Trail und Versionen lassen sich einfach nachvollziehen.
Option 1: Ohne zusätzliche Pakete
Es ist dabei zu beachten, dass der .git
-Ordner im gleichen Verzeichnis wie die LaTeX-Dateien liegt.
Für dies LaTeX-Dokument können die Git-Informationen über diesen Weg nicht ausgelesen werden, da der .git
ein Ordner oberhalb liegt. Bei einem LaTeX-Lauf können die Git-Informationen nicht ausgelesen werden.
Fehlerhafte Ordnerstruktur in diesem Repo:
|.git
|--/latex-templates/template-for-your-thesis
|
|--latex-templates/letter-simple
|
|--latex-templates/letter-serial
Korrekte Anordnung der Ordner:
|.git
|bibs/
|einstell/
|figs/
|glossar/
|texs/
|variables/
|diplomarbeit.tex
|...
Option 1: einstell.tex
In die Datei einstell.tex
wurde der Abschnitt eingefügt. Dadurch werden ein paar neue Befehle erstellt und die Informationen aus den Dateien im Order .git
abgerufen.
Es werden die Git-Informationen abgerufen:
- Branch
- Tags
- Commit Message
- Commit ID
\usepackage{ifthen}
% --- Git Information
% Inspired by
% https://tex.stackexchange.com/questions/455396/how-to-include-the-current-git-commit-id-and-branch-in-my-document
\newcommand{\dotGitHEAD}{}
\newcommand{\branch}{}
\newcommand{\commit}{}
\newcommand{\commitmessage}{}
\newcommand{\tags}{}
\makeatletter\let\myfilehandle\@inputcheck\makeatother
\openin\myfilehandle=.git/HEAD\relax
\begingroup\endlinechar-1
\global\read\myfilehandle to \dotGitHEAD
\endgroup
\closein\myfilehandle
\newcommand\GetBranch{}
\def\GetBranch ref: refs/heads/#1\relax{\renewcommand{\branch}{#1}}
\expandafter\GetBranch\dotGitHEAD\relax
\openin\myfilehandle=.git/refs/heads/\branch\relax
\begingroup\endlinechar-1
\global\read\myfilehandle to \commit
\endgroup
\closein\myfilehandle
%Commit Message
\openin\myfilehandle=.git/COMMIT_EDITMSG
\begingroup\endlinechar-1
\global\read\myfilehandle to \commitmessage
\endgroup
\closein\myfilehandle
% ------------------
Option 1: titel.tex
In der Datei titel.tex
werden die Variablen eingefügt, um die Git-Informationen dort anzuzeigen.
...
% Fusstext
{\bf GIT INFORMATION} \\[5mm]
{Branch: \branch \: - \: Version: \tags \: - \: Commit Message ID: \commitmessage \: - \: Commit ID: \commit} \\[5mm]
{\ifthenelse{\equal{\mainbranch}{\branch}}%
{\LARGE{FINAL VERSION}}%
{\LARGE{DRAFT}}} \\[5mm]
\orterstellung, den \tagerstellung. \monaterstellung \ \jahrerstellung
...
Option 1: diplomarbeit.tex
In der Hauptdatei diplomarbeit.tex
werden die Informationen in den fancyfoot
eingefügt, damit die Git-Daten auf jeder Seite im Footer aufgebracht werden:
...
\fancyfoot[L]{\tiny{\autor \\ \email}}%
\fancyfoot[C]{%
% Print Draft On Title Page based on Git Branch
% see variables/variables.tex for definition of your Git main branch
\ifthenelse{\equal{\mainbranch}{\branch}}%
{\large{VERSION: \tags }}%
{\large{- DRAFT -}}
}%
\fancyfoot[R]{\tiny{\today{} \: - Git Branch: \branch \\ \commit}}%
...
Option 1: variables.tex
Die Variable für den Namen des Hauptbranches ist in der Datei variables/variables.tex
einzufügen.
Im Standard wird der Name main
verwendet.
\newcommand{\mainbranch}{main}
Gib mir gerne einen Kaffee ☕ aus ❗️
Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.
Option 2: Mit dem Paket gitinfo2
Das Paket gitinfo2
stellt eine Vielzahl an Optionen zur Verfügung, um die Git-Informationen in das eigene Dokument zu überführen.
Bevor es aber losgeht, sind nach der Installation des Pakets noch ein paar Skripte im Ordner .git/hooks
anzulegen.
Die Skripte erstellen eine neue Datei .git/gitHeadInfo.gin
und aktualisieren bei einem neuen commit, checkout, merge
automatisch die Metadaten.
Auf diese Datei greift dann das Paket gitinfo2
zurück, um die Daten abzurufen und in das LaTeX-Dokument zu überführen.
Eine Vorlage (post-xxx-sample.txt
) für die Skript-Datei ist im Ordner von gitinfo2
zu finden, oder es kann von der ctan-Website heruntergeladen werden.
Die Datei post-xxx-sample.txt
ist dreimal zu kopieren und umzubenennen in
post-checkout
post-commit
post-merge
und gesammelt in das Verzeichnis .git/hook
zu kopieren.
Die Rechte für die drei Skripte ist so anzupassen, dass sie auf -rwxr-x-r-x
gestellt sind.
chmod +x post-checkout post-commit post-merge
Danach können die Befehle von gitinfo2
genutzt werden und die entsprechenden Abschnitte in den Dateien ergänzt werden.
Warning
Ich verwende eine Kombination aus beiden Optionen, da ich mit dem Paket ifthen
Abfragen erstellt habe.
Option 2: einstell.tex
\usepackage{ifthen}
\usepackage{gitinfo2}
% --- Git Information
% Inspired by
% https://tex.stackexchange.com/questions/455396/how-to-include-the-current-git-commit-id-and-branch-in-my-document
\newcommand{\dotGitHEAD}{}
\newcommand{\branch}{}
\newcommand{\commit}{}
\newcommand{\commitmessage}{}
\makeatletter\let\myfilehandle\@inputcheck\makeatother
\openin\myfilehandle=.git/HEAD\relax
\begingroup\endlinechar-1
\global\read\myfilehandle to \dotGitHEAD
\endgroup
\closein\myfilehandle
\newcommand\GetBranch{}
\def\GetBranch ref: refs/heads/#1\relax{\renewcommand{\branch}{#1}}
\expandafter\GetBranch\dotGitHEAD\relax
\openin\myfilehandle=.git/refs/heads/\branch\relax
\begingroup\endlinechar-1
\global\read\myfilehandle to \commit
\endgroup
\closein\myfilehandle
%Commit Message
\openin\myfilehandle=.git/COMMIT_EDITMSG
\begingroup\endlinechar-1
\global\read\myfilehandle to \commitmessage
\endgroup
\closein\myfilehandle
% ------------------
Option 2: titel.tex
\titelseite{
% Fenstertext
{\LARGE \bf \maintitle} \\[15mm]
{\large \subtutitle} \\[15mm]
%{\large \bf \autor} \\[5mm]
\bigskip
{\bf GIT INFORMATION} \\[5mm]
{\bf Branch: \gitBranch} \\[5mm]
{\bf Version/Tag: \gitRel} \\[5mm]
{Commit Message: \commitmessage} \\[5mm]
{Commit Hash: \gitAbbrevHash} \\[5mm]
{Author: \gitAuthorName \: - \gitAuthorEmail} \\[5mm]
{Committer: \gitCommitterName \: - \gitCommitterEmail} \\[15mm]
\bigskip
% Print Draft On Title Page based on Git Branch
% see variables/variables.tex for definition of your Git main branch
\ifthenelse{\equal{\mainbranch}{\branch}}%
{\large{FINAL VERSION}}%
{\large{DRAFT}}\\[5mm]
{\large{\gitAuthorDate}} \\[5mm]
}{
% Fusstext
%Juli 2022
}
Option 2: diplomarbeit.tex
...
% --- Benutzerdefinierte Fußzeile -------------------------------------
% Durch Aktivieren von fancyfoot werden wird die definierte Fußzeile, wie z.B. die Seitenzahlen, überschrieben.
% Kann verwendet werden, um Entwürfe und/oder Versionen eindeutig zu kennzeichnen
% ---
% Git Details
\fancyfoot[L]{\tiny{\gitAuthorName \\ \gitAuthorEmail}}%
\fancyfoot[C]{%
% Print Draft On Title Page based on Git Branch
% see variables/variables.tex for definition of your Git main branch
\ifthenelse{\equal{\mainbranch}{\branch}}%
{\large{VERSION: \gitRel }}%
{\large{- DRAFT -}}
}%
\fancyfoot[R]{\tiny{
\gitAuthorDate \\ %
Git Branch: \gitBranch \\ %
\gitAbbrevHash %
}}%
% ---
% ---
% Without Git Details
%\fancyfoot[L]{\tiny{\autor \\ \email}}%
%\fancyfoot[C]{\LARGE{DRAFT}}%
%\fancyfoot[R]{\tiny{\today{} \: - Git Branch: \branch \\ \commit}}%
% ---
...
Gib mir gerne einen Kaffee ☕ aus ❗️
Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.
Follow Me❗️