Я написал это в Powershell, чтобы получить git logdata и сохранить его как json или другой формат:
$header = @("commit","tree","parent","refs","subject","body","author","commiter")
[string] $prettyGitLogDump= (git log MyCoolSite.Web-1.4.0.002..HEAD --pretty=format:'%H|%T|%P|%D|%s|%b|%an|%cn;')
$gldata = foreach ($commit in $prettyGitLogDump.Replace("; ",';') -split ";", 0, "multiline") {
$prop = $commit -split "\|"
$hash = [ordered]@{}
for ($i=0;$i -lt $header.count;$i++) {$hash.add($header[$i],$prop[$i])}
[pscustomobject]$hash
}
$gldata | ConvertTo-Json | Set-Content -Path "GitLog.json"
headernames:
"commit", "tree"«parent», «refs», «subject», «body», «author», «commiter»
должны быть синхронизированы с полями данных:
--pretty = формат: '% H |% T |% P |% D |% s |% b |% an |% cn;'
См. Prettyformat docs .
Я выбираю трубу | в качестве разделителя.Я принимаю на себя риск, что он не используется в сообщении фиксации.Я использовал точку с запятой ; в качестве sep для каждого коммита.Я должен, конечно, выбрать что-то еще.Вы можете попытаться написать какое-нибудь умное регулярное выражение для сопоставления и проверить, используются ли ваши разделители в сообщении фиксации.Или вы можете написать более сложное регулярное выражение для соответствия точке разделения или кодировать скрипт-блок powershell для определения разделения .
Самая сложная строка в коде, которую нужно выяснить, была.
prettyGitLogDump.Replace (";", ';') -split ";", 0, "multiline"
Необходимо установить параметр multiline, потому что в сообщениях может быть CR / LF, а затем разделительные остановки - вы можете установить многострочное, только если указано nr разделения.Поэтому второе значение параметра 0, которое означает все.
(Заменить (";", ';') - это просто хак, я получаю пробел после первого коммита. Поэтому я удаляю пробел после разделителя коммитов.Возможно, есть лучшее решение.)
В любом случае, я думаю, что это могло бы быть работоспособным решением для пользователей Windows или поклонников PowerShell, которые хотят, чтобы журнал от git видел, кто сделал коммит и почему.