Sign up ×

Is there a way to insert the last git commit date into a document without having to add git hooks (like the gitinfo package does it)?

I'm not 100% sure how LaTeX packages work, but if they can access the current directory during compile-time and if they can execute external commands, that should easily be possible...

share|improve this question

3 Answers 3

here is my solution: use \write18 to write a temp.dat file which contains 2 commands:


then input that file, the \GITxxx will get defined. We can use it anywhere, e.g. running title.

\immediate\write18{git log -1 --pretty=format:"\@backslashchar gdef\@backslashchar GITHash{\@percentchar h}\@percentchar n \@backslashchar gdef\@backslashchar GITDate{\@percentchar ad}" --date=short > /tmp/temp.dat }
share|improve this answer
up vote 11 down vote accepted

I ended up using a custom Makefile to insert the revision info.

When creating a Makefile instead of using the --enable-write18 compiler flag, you require people to use a specific compilation method. That sucks. But the same thing counts for write18, as people have to configure their compiler to allow possibly insecure access to their system. By using a Makefile, the security risk of write18 is reduced, while providing an almost cross-platform method of compiling your document (Make is available when using cygwin on Windows; cygwin usually comes with git anyways). To (intelligently) compile the document itself, you can use latexmk on Linux and OS X (comes with TeXLive) and texify on Windows (comes with MiKTeX).

This is the Makefile:

LL=latexmk -pdf
CLEAN=latexmk -C

all: revision.tex $(TARGET)

pdf: revision.tex $(TARGET)

.PHONY : clean revision.tex $(TARGET)

    echo "% Autogenerated, do not edit" > revision.tex
    echo "\\newcommand{\\revisiondate}{`git log -1 --format=\"%ad\" --date=short`}" >> revision.tex
    echo "\\newcommand{\\revision}{`git log -1 --format=\"%h\"`}" >> revision.tex

$(TARGET): $(TARGET:%.pdf=%.tex) $(SRC)
    $(LL) $<

    rm -f revision.tex

If people want to build the PDF directly from their favorite IDE, they can tell the IDE to trigger "make". This should work with most software. When you use vim for example, you can use a mapping like this:

map <leader>m :w<CR> :!make<CR><CR>

The Makefile creates a file called revision.tex which looks like this:

% Autogenerated, do not edit

To insert it into the main document, simply use \input{revision} and then insert \revisiondate or \revision at the desired place.

share|improve this answer
I would say you would be better of using the gitinfo2 package. Even when you don‘t want to use git hooks you still can call the post-xxx-sample.txt script from your makefile. –  ypid Feb 6 at 15:47

enter image description here

This is svn but any command line is the same.

Depending on your configuration you probably need

pdflatex --enable-write18 filename

to enable \write18 to be a hook to execute shell commands.

this writes to a temporary file using the shell escape, then inputs it



\immediate\write18{svn info \jobname.tex | grep "Changed Date" > \ }

share|improve this answer
Thank you! This works (although the configuration might be a little annoying depending on the software used) :) –  Danilo Bargen Oct 4 '12 at 23:18
Corresponding git write18 command could be: \write18{git log -1 --format="\@percentchar ad" --date=short > \} –  Danilo Bargen Oct 7 '12 at 21:35
\immediate\write18{git log -1 --pretty=format:"%h%x3b%ad" --date=short > \} this is the line I'm using for git at the moment. –  Dror May 23 '13 at 20:35

Your Answer


