Я создаю приложение С#, используя Git как мой контроль версий.
Есть ли способ автоматически вставлять последний хеш фиксации в исполняемый файл при создании моего приложения?
Например, печать хэша commit на консоли будет выглядеть примерно так:
class PrintCommitHash
{
    private String lastCommitHash = ?? // What do I put here?
    static void Main(string[] args)
    {
        // Display the version number:
        System.Console.WriteLine(lastCommitHash );
    }
}
Обратите внимание, что это нужно делать в строить время, а не время выполнения, так как мой развернутый исполняемый файл не будет иметь доступ к репозиторию Git.
Соответствующий вопрос для С++ можно найти здесь .
 ИЗМЕНИТЬ
По запросу @mattanja я отправляю Git hook script, который я использую в своих проектах. Настройка:
- Крючки - это скрипты linux shell, которые помещаются под: path_to_project \.git\hooks
 - Если вы используете msysgit, папка hooks уже содержит некоторые примеры скриптов. Чтобы сделать их Git, удалите расширение ".sample" из имени script.
 - Имена скриптов hook совпадают с вызывающим их событием. В моем случае я модифицировал post-commit и post-merge.
 - Мой файл AssemblyInfo.cs находится непосредственно под контуром проекта (тот же уровень, что и папка .git). Он содержит 23 строки, и я использую Git для генерации 24-го.
 
Поскольку мой linux-обход немного ржавый, script просто считывает первые 23 строки AssemblyInfo.cs во временный файл, эхо-хэш хеша Git до последней строки и переименовывает файл обратно в AssemblyInfo.cs. Я уверен, что есть лучшие способы сделать это:
#!/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
Надеюсь, что это поможет.


