git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: auto insert history info into source files, at commit?

From
Jakub Narebski <jnareb@gmail.com>
Date
Apr 8, 2008, 17:04 UTC
Message-ID
<m38wzoth0l.fsf@localhost.localdomain>
In-Reply-To
<16562665.post@talk.nabble.com>
oxcrete <oxcrete@yahoo.com> writes:
> How do you do this with Git? I couldn't find it in the documentation.  the
> standard $Log, $Revision... didn't seem to work. I'll take an RTFM answer if
> you can point me to the right section in the manual. Appologies, if this was
> posted before - couldn't find a good regex to search this topic.

http://git.or.cz/gitwiki/GitFaq#head-4a0afe71a2bb7734777a8b0b345e0308aefdbd40 "Does git have keyword expansion?" (and also next section, "Does git allow arbitrary conversion of contents?")

Simply said keywords do not work well together with nonlinear history, and especially with the way git is engineered, being content-adressed. If you have the following history:

  A---B---C---D---E
           \
            \-F---G---H

and the file 'foo' has the same contents in both branches, in both E and H commits (revisions), it would be noticed by git and it wouldn't touch this file when switching branches. It is one of the keys to git performance. This is important not only for switching branches, but also for merging.

But if they have $Revision$, or $Author$ keywords, and those would be different, it couldn't be done this way.

Therefore git supports "keyword expansion" in three ways, beginning from simplest.

1. The `ident` attribute, which allows to expand $Id$ to 
$Id: <sha-1>$, where <sha-1> is blob (file contents) identifier.
2. The `export-subst` attribute, and/or various tricks in Makefile,
which allow embedding information about current revision (like result
of "git describe") in files when using "git archive" (atribute), or
"make" / "make dist".  This is I think the preferred way; both git and
Linux use Makefile tricks to embed version info in result of
compilation.
3. Use `filter` attribute to expand keywords when checking out file,
and removing keywords when commiting changes (but watch for binary
files!).  This would affect performance.  I also don't think that
there is any example doing keyword expansion with `filter`
gitattribute; you can be first! ;-)
-- 
Jakub Narebski
Poland
ShadeHawk on #git
Previous: oxcreteNext: Santi Béjar
Message 2 of 3 in “auto insert history info into source files, at commit?”
  1. oxcreteApr 8, 2008
  2. Jakub NarebskiApr 8, 2008
  3. Santi BéjarApr 8, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.