В настоящее время у меня есть следующий сценарий PS, чтобы извлечь версию SW из тега Git и интегрировать ее во встроенную сборку.
Это работает для тегов, таких как v1.2.3
, и создает версии файлов и версий продуктов, например, например. 1.2.3.16
и 1.2.3.16-13b05b79
# Get version info from Git. For example: v1.2.3-45-g6789abc
$gitVersion = git describe --match "v[0-9]*" --long --always --dirty;
# Get name of current branch
$gitBranch = git rev-parse --abbrev-ref HEAD;
# Write Git information to version.txt
$versionFile = $args[1] + "\version.txt";
"version: " + $gitVersion > $versionFile;
"branch: " + $gitBranch >> $versionFile;
# Parse Git version info into semantic pieces
$gitVersion -match '[v](.*)-(\d+)-[g](.+)$';
$gitTag = $Matches[1];
$gitCount = $Matches[2];
$gitSHA1 = $Matches[3];
# Define file variables
$assemblyFile = $args[0] + "\Properties\AssemblyInfo.cs";
# Read template file, overwrite place holders with git version info
$newAssemblyContent = Get-Content $assemblyFile |
%{$_ -replace '\$FILEVERSION\$', ($gitTag + "." + $gitCount) } |
%{$_ -replace '\$INFOVERSION\$', ($gitTag + "." + $gitCount + "-" + $gitSHA1) };
echo "Injecting Git Version Info to AssemblyInfo.cs"
$newAssemblyContent > $assemblyFile;
Теперь я хотел бы расширить регулярное выражение в этом сценарии, чтобы я мог использовать теги с кратким описанием, например v1.2.3-description
, где description
может иметь переменную длину.
В идеале, регулярное выражение должно учитывать тире в описании, так что v1.2.3-description-with-dashes
также будет действительным и любые другие символы, которые разрешены в тегах Git.
Что делает это трудным для меня (я пробовал), так это то, что команда git describe
выведет это как v1.2.3-description-with-dashes-16
, как я могу различить тире, принадлежащие выходу Git, и те, которые принадлежат описанию.