Ingo Karkat Ingo Karkat - 4 months ago 23
Git Question

Update ident string after checkin

I have enabled the expansion of

in the
file. This allows me to quickly identify whether the file is outdated when someone else checked out my repository and installed it from there.

Now, I also sync the contents of my own Git repository to other (non-development, i.e. without Git) systems. The trouble is that the keyword expansion only happens on checkout, but my workflow is commit -> push -> sync, so the synced copies contain outdated Ids.

How can I easily force an update of the Ids after a local commit? (Bonus points for doing this automatically after any commit!)

A simple
git checkout
doesn't work (also not with
), probably because the file contents haven't changed. Neither does
git checkout-index --force
. I only managed to accomplish this via either local modification (cumbersome, need to know the modified files):

$ echo "modified" >> file
$ git checkout file

or by temporarily checking out the previous commit:

$ git checkout HEAD^
$ git checkout HEAD@{1}


This can be done via a post-commit hook. I've automated the setup via a script, maintained as part of my git-extensions repository:

$ git-ident-update --help
Update the expansion of $Id$ to $Id:...$ via ident in the .gitattributes
after a commit.
To do this automatically in the future, invoke with --install.
Usage: git-ident-update [--install|--uninstall|--status|--set [<path>[ <path> ...]]] [-?|-h|--help]