Como eu habilito a string de identificação para um repository Git?

Como faço para ativar ident $Id$ em arquivos em um repository Git?

   

Resumo: A maneira recomendada de incorporar informações de versão em um produto é usar o sistema de compilation para isso; veja abaixo os detalhes e abordagens alternativas.


No Git (e acho que normalmente também em outros sistemas VCS com commits atômicos) não existe uma versão de um único arquivo .

O Git suporta a expansão sob demanda da palavra-chave $Id:$ , mas:

  1. É feito apenas a pedido . Você tem que especificar (talvez usando o padrão globbing) que um arquivo (ou um conjunto de arquivos) tem um conjunto de atributos ident (no arquivo ‘.gitattributes’ na tree, ou em ‘.git / info / attributes’ para configurações do repository local) .
  2. Ele se expande para o SHA-1 do conteúdo do arquivo (ou, para ser mais exato, para o $Id:$ ). O motivo para essa escolha é que o Git não toca em arquivos que não foram alterados durante a troca ou rebobinagem de filiais; se ‘$ Id: $’ for expandido para informações de revisão, será necessário atualizar todos os arquivos controlados por versão, por exemplo, ao alternar filiais.

O Git suporta um conjunto bastante amplo de $Format:...$ placeholders que se expande para confirmar informações (por exemplo, $Format:%H$ substituído por um hash de commit), mas:

  1. A expansão é feita somente ao executar o git archive , em seu arquivo de saída.
  2. Isso é feito sob solicitação , controlado pelo atributo export-subst .

A maneira recomendada de incorporar informações de versão é fazer isso através do sistema de compilation (em um estágio de compilation); veja, por exemplo, o script Git Makefile e GIT-VERSION-GEN usado pelo Makefile na interface web do Git para o repository git.git.

No entanto, você pode usar um driver de filtro clean / smudge (via filter attribute) para obter uma expansão de palavra-chave semelhante a CVS, expandindo as palavras-chave no checkout e limpando-as ao inserir conteúdo no repository.

Você pode fazer isso adicionando um padrão para quais arquivos deseja essa funcionalidade seguido por ident no arquivo .gitattributes . Isso replaceá $ Id $ por $ Id: $ no check-out do arquivo. Observe que ele não fornecerá um número de revisão do arquivo como no CVS / SVN.

Exemplo:

 $ echo '*.txt ident' >> .gitattributes $ echo '$Id$' > test.txt $ git commit -a -m "test" $ rm test.txt $ git checkout -- test.txt $ cat test.txt 

Link para gitattributes (5) Página do manual

O ident do Git não faz o que o $ Id $ faz em outros sistemas de versionamento. Como um kludge, use o RCS juntamente com o git: RCS para revisões de arquivos individuais e git para verificar o projeto como um todo. Como eu disse, isso é um kludge, mas faz sentido (às vezes para algumas coisas).