Ce qui se passe ici : Git est optimisé pour passer d'une branche à l'autre le plus rapidement possible. En particulier, git checkout
est conçu pour ne pas toucher aux fichiers qui sont identiques dans les deux branches.
Malheureusement, la substitution des mots-clés RCS casse cela. Par exemple, en utilisant $Date$
exigerait git checkout
pour toucher chaque fichier de l'arbre lors du changement de branche. Pour un référentiel de la taille du noyau Linux, cela provoquerait un arrêt brutal.
En général, le mieux est de marquer au moins une version :
$ git tag v0.5.whatever
...et ensuite appelez la commande suivante depuis votre Makefile :
$ git describe --tags
v0.5.15.1-6-g61cde1d
Ici, git me dit que je travaille sur une version anonyme 6 commits après v0.5.15.1, avec un hash SHA1 commençant par g61cde1d
. Si vous collez la sortie de cette commande dans un fichier de type *.h
quelque part, vous êtes en affaires et vous n'aurez aucun problème à relier le logiciel publié au code source. C'est la manière préférée de faire les choses.
Si vous ne pouvez pas éviter d'utiliser les mots-clés RCS, vous pouvez commencer par ceci explication par Lars Hjemli . En principe, $Id$
est assez facile, et vous si vous utilisez git archive
vous pouvez également utiliser $Format$
.
Mais, si vous ne pouvez absolument pas éviter les mots-clés RCS, ce qui suit devrait vous aider à démarrer :
git config filter.rcs-keyword.clean 'perl -pe "s/\\\$Date[^\\\$]*\\\$/\\\$Date\\\$/"'
git config filter.rcs-keyword.smudge 'perl -pe "s/\\\$Date[^\\\$]*\\\$/\\\$Date: `date`\\\$/"'
echo '$Date$' > test.html
echo 'test.html filter=rcs-keyword' >> .gitattributes
git add test.html .gitattributes
git commit -m "Experimental RCS keyword support for git"
rm test.html
git checkout test.html
cat test.html
Sur mon système, j'obtiens :
$Date: Tue Sep 16 10:15:02 EDT 2008$
Si vous avez du mal à obtenir les échappements de l'obus dans le fichier smudge
y clean
pour fonctionner, écrivez simplement vos propres scripts Perl pour étendre et supprimer les mots-clés RCS, respectivement, et utilisez ces scripts comme filtre.
Notez que vous vraiment Il ne faut pas faire cela pour plus de fichiers qu'il n'est absolument nécessaire, sinon git perdrait une grande partie de sa vitesse.