LaTeX und Git - Git Information in LaTeX-Dokumenten verwenden
Git-Informationen, wie Branch, Tags, etc. lassen sich automatisch in LaTeX-Dokumenten übernehmen.
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.
ACHTUNG❗️
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}}%
% ---
...
Option 2: variables.tex
siehe dazu Option 1: variables.tex
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❗️