Je suis en train de construire une application C#, en utilisant Git comme contrôle de version.
Existe-t-il un moyen d'intégrer automatiquement le dernier hash de commit dans l'exécutable lorsque je construis mon application ?
Par exemple, l'impression du hash du commit sur la console ressemblerait à quelque chose comme :
class PrintCommitHash
{
private String lastCommitHash = ?? // What do I put here?
static void Main(string[] args)
{
// Display the version number:
System.Console.WriteLine(lastCommitHash );
}
}
Notez que cela doit être fait à construire temps, pas temps de fonctionnement car mon exécutable déployé n'aura pas accès au dépôt git.
Une question connexe pour C++ peut être trouvée ici .
EDIT
A la demande de @mattanja, je poste le hook git script que j'utilise dans mes projets. La configuration :
- Les hooks sont des scripts shell linux, qui sont placés sous : chemin_vers_le_projet \.git\hooks
- Si vous utilisez msysgit le crochets contient déjà quelques exemples de scripts. Pour que git les appelle, enlevez l'extension '.sample' du nom du scripts.
- Les noms des scripts de crochet correspondent à l'événement qui les invoque. Dans mon cas, j'ai modifié post-commission y post-fusion .
- Mon AssemblyInfo.cs se trouve directement sous le chemin du projet (au même niveau que le fichier .git ). Il contient 23 lignes, et j'utilise git pour générer la 24ème.
Comme mon linux-shelling est un peu rouillé, le script lit simplement les 23 premières lignes de AssemblyInfo.cs dans un fichier temporaire, ajoute le hash git à la dernière ligne, et renomme le fichier sous le nom de AssemblyInfo.cs . Je suis sûr qu'il existe de meilleures façons de procéder :
#!/bin/sh
cmt=$(git rev-list --max-count=1 HEAD)
head -23 AssemblyInfo.cs > AssemblyInfo.cs.tmp
echo [assembly: AssemblyFileVersion\(\"$cmt\"\)] >> AssemblyInfo.cs.tmp
mv AssemblyInfo.cs.tmp AssemblyInfo.cs
J'espère que cela vous aidera.