Я создаю приложение С#, используя 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
Надеюсь, что это поможет.