В настоящее время для моих проектов C ++ я запускаю операцию предварительной компиляции, которая записывает отдельный заголовочный файл, который записывает хэш git сборки, эффективно давая мне возможность точно видеть, с какого коммита запускается любой экземпляр программы. пока он работает.
Пока что работает примерно так:
set file="%~dp0git_sha1.h"
echo #ifndef git_sha1H > %file%
echo #define git_sha1H >> %file%
set cmd=git rev-parse HEAD
set git_sha1=#define GIT_SHA1
for /f %%i in ('%cmd%') do set "git_sha1=%git_sha1% "%%i""
echo %git_sha1% >> %file%
echo #endif >> %file%
Теперь я пытаюсь добавить дату фиксации HEAD, которая будет сделана с: git show -s --format=%ci HEAD
Однако при дублировании средней секции для размещения этой команды я сталкиваюсь со всевозможными ошибками, такими как fatal: ambiguous argument 'ci': unknown revision or path not in the working tree
, unknown pretty format 'ci'
и т. Д.
Я сузил это до неэкранированных символов в цикле for ипридумал что-то вроде этого
set cmd2=git show -s --format^=%%ci HEAD
set git_date=#define GIT_DATE
for /f %%i in ('%cmd2%') do set "git_date=%git_date% "%%i""
echo %git_date% >> %file%
Тем не менее, этот STILL дает мне fatal: ambiguous argument '%ci: unknown revision or path not in the working tree.
Я прочитал это, поскольку экранированный ^=
неправильно передается в git, так что он видит--format %ci HEAD
, а не --format=%ci HEAD
, но я не совсем уверен, где я здесь, особенно когда отдельная строка отладки echo %cmd2%
показывает правильную команду.
Есть идеи?