I've defined a post-commit hook in .git/hooks
that I want to also execute on the server side (Gitlab.com in my case).
Background: I'm using gitinfo2 along with a post-commit hook in a LaTeX project to quote info about the latest git tag within the pdf. This works well on my computer, but fails when I push the repo to Gitlab.
It doesn't cause an error, but gives the following warning, which basically means that the git hook never executed.
Package gitinfo2 Warning: I can't find the file '.git/gitHeadInfo.gin'.
(gitinfo2) All git metadata has been set to '(None)'.
From what I've read online so far, client side git hooks don't execute on the server - but why not? In a situation like this, I would want the hook to execute on both the client and the server.
So, basically, I want the sequence of events to be like this:
gitHeadInfo.gin
being created in the .git
folder.gitinfo
package helping to pull the git version info from gitHeadInfo.gin
.I've got everything working except step 3. So, my current workaround is to build the pdf on my computer as well and commit it rather than relying on Gitlab CI.
Contents of the git hook:
#!/bin/sh
# Copyright 2015 Brent Longborough
# Part of gitinfo2 package Version 2
# Release 2.0.7 2015-11-22
# Please read gitinfo2.pdf for licencing and other details
# -----------------------------------------------------
# Post-{commit,checkout,merge} hook for the gitinfo2 package
#
# Get the first tag found in the history from the current HEAD
FIRSTTAG=$(git describe --tags --always --dirty='-*' 2>/dev/null)
# Get the first tag in history that looks like a Release
RELTAG=$(git describe --tags --long --always --dirty='-*' --match '[0-9]*.*' 2>/dev/null)
# Hoover up the metadata
git --no-pager log -1 --date=short --decorate=short \
--pretty=format:"\usepackage[%
shash={%h},
lhash={%H},
authname={%an},
authemail={%ae},
authsdate={%ad},
authidate={%ai},
authudate={%at},
commname={%cn},
commemail={%ce},
commsdate={%cd},
commidate={%ci},
commudate={%ct},
refnames={%d},
firsttagdescribe={$FIRSTTAG},
reltag={$RELTAG}
]{gitexinfo}" HEAD > .git/gitHeadInfo.gin
client side git hooks don't execute on the server - but why not?
Generally, you are pushing to a bare repo (a repo without working tree, where you cannot do any commit directly)
So server-side commits are more about enforcing policies than creating new commits.
If you really needed new content to be created on the server side (especially one you have no direct control, like GitLab.com), you would need:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With