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 ❗️
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-checkoutpost-commitpost-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 😀
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

