# Could GIT manage revision headers embedded in code ?

4 messages from 2017-05-02 to 2017-05-02. Participants: Delanoe Eric, Christian Couder, Johannes Schindelin.
Thread: https://gitlist.dev/t/45849

## Delanoe Eric, 2017-05-02 11:48

Subject: Could GIT manage revision headers embedded in code ?
Message-ID: <135C7A92C7D64E488B830ADC2970C70132AE6407@SVGEA-EMAIL.gea.fr>
URL: https://gitlist.dev/e/135C7A92C7D64E488B830ADC2970C70132AE6407%40SVGEA-EMAIL.gea.fr

```
Hello,

We need a great deal of traceability for our source, made of many scripts in interpreted languages, spread in many "independent" modules, as far as can be ;-).
In particular, somebody troubleshooting a script in production should be able to know exactly the revision or commit ID (or tag label) of a given file, and its location in the GIT source directory tree.

Our old CVS... let's say it was its only advantage... was doing this with keywords embedded in code comments: $Header$, $Id$, $Rev$, $File$ etc... When a file was committed, its $Header$ keyword was expanded into a rich piece of "version" information like '' $Header: /cvsstore/SourcesOracle/Install/COMMUN/CST.sql,v 1.69.2.10 2017/04/14 09:38:48 edelanoe $".

Could this kind of "keyword expansion" feature be added into GIT ?
Focusing on the goal: enable the identification of a file and its revision(*) inside the committed code itself.
(*) the "revision" information or a commit ID. The tag(s) attached at commit time would be less reliable, as a tag can be moved between revisions.

Thank you in advance for any answer,
Best regards,
E.Delanoë

Grenobloise d'Electronique et d'Automatismes
Inovallée - 12, Chemin de Malacher
38243 MEYLAN CEDEX 
FRANCE

```

## Christian Couder, 2017-05-02 12:11

Subject: Re: Could GIT manage revision headers embedded in code ?
Message-ID: <CAP8UFD0NrTyGYgHeEOWpUH5v0ejKvcKu+Mzd8_scYbvzL4b4zg@mail.gmail.com>
URL: https://gitlist.dev/e/CAP8UFD0NrTyGYgHeEOWpUH5v0ejKvcKu%2BMzd8_scYbvzL4b4zg%40mail.gmail.com
In-Reply-To: <135C7A92C7D64E488B830ADC2970C70132AE6407@SVGEA-EMAIL.gea.fr>

```
Hi,

On Tue, May 2, 2017 at 1:48 PM, Delanoe Eric <e.delanoe@gea.fr> wrote:
> Hello,
>
> We need a great deal of traceability for our source, made of many scripts in interpreted languages, spread in many "independent" modules, as far as can be ;-).
> In particular, somebody troubleshooting a script in production should be able to know exactly the revision or commit ID (or tag label) of a given file, and its location in the GIT source directory tree.
>
> Our old CVS... let's say it was its only advantage... was doing this with keywords embedded in code comments: $Header$, $Id$, $Rev$, $File$ etc... When a file was committed, its $Header$ keyword was expanded into a rich piece of "version" information like '' $Header: /cvsstore/SourcesOracle/Install/COMMUN/CST.sql,v 1.69.2.10 2017/04/14 09:38:48 edelanoe $".
>
> Could this kind of "keyword expansion" feature be added into GIT ?

You can already do it with "smudge" and "clean" filters. Look for
"Keyword Expansion" in:

https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes

```

## Delanoe Eric, 2017-05-02 13:33

Subject: RE: Could GIT manage revision headers embedded in code ?
Message-ID: <135C7A92C7D64E488B830ADC2970C70132AE7442@SVGEA-EMAIL.gea.fr>
URL: https://gitlist.dev/e/135C7A92C7D64E488B830ADC2970C70132AE7442%40SVGEA-EMAIL.gea.fr
In-Reply-To: <CAP8UFD0NrTyGYgHeEOWpUH5v0ejKvcKu+Mzd8_scYbvzL4b4zg@mail.gmail.com>

```
Thank you for your quick answer.
And great answer ! I'm looking forward to try this.

Thanks again and best regards,
E.Delanoë


-----Message d'origine-----
De : Christian Couder [mailto:christian.couder@gmail.com] 
Envoyé : mardi 2 mai 2017 14:11
À : Delanoe Eric
Cc : git@vger.kernel.org
Objet : Re: Could GIT manage revision headers embedded in code ?

Hi,

On Tue, May 2, 2017 at 1:48 PM, Delanoe Eric <e.delanoe@gea.fr> wrote:
> Hello,
>
> We need a great deal of traceability for our source, made of many scripts in interpreted languages, spread in many "independent" modules, as far as can be ;-).
> In particular, somebody troubleshooting a script in production should be able to know exactly the revision or commit ID (or tag label) of a given file, and its location in the GIT source directory tree.
>
> Our old CVS... let's say it was its only advantage... was doing this with keywords embedded in code comments: $Header$, $Id$, $Rev$, $File$ etc... When a file was committed, its $Header$ keyword was expanded into a rich piece of "version" information like '' $Header: /cvsstore/SourcesOracle/Install/COMMUN/CST.sql,v 1.69.2.10 2017/04/14 09:38:48 edelanoe $".
>
> Could this kind of "keyword expansion" feature be added into GIT ?

You can already do it with "smudge" and "clean" filters. Look for "Keyword Expansion" in:

https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes

```

## Johannes Schindelin, 2017-05-02 15:54

Subject: Re: Could GIT manage revision headers embedded in code ?
Message-ID: <alpine.DEB.2.20.1705021751250.3480@virtualbox>
URL: https://gitlist.dev/e/alpine.DEB.2.20.1705021751250.3480%40virtualbox
In-Reply-To: <135C7A92C7D64E488B830ADC2970C70132AE6407@SVGEA-EMAIL.gea.fr>

```
Hi Eric,

On Tue, 2 May 2017, Delanoe Eric wrote:

> Could this kind of "keyword expansion" feature be added into GIT ?

Back in the days, it was decided that this should be part of the "export
as zip" functionality, see the `export-subst` feature in git-archive's and
gitattributes' documentation.

In reality, what most projects do is to generate a header or some such as
part of their build process. Git itself may serve as a case in point:

	https://github.com/git/git/blob/master/GIT-VERSION-GEN

used in

	https://github.com/git/git/blob/v2.12.2/Makefile#L390-L392

Ciao,
Johannes

```
