Git вывод журнала в XML, JSON или YAML? - PullRequest
38 голосов
/ 05 января 2011

Это довольно простой вопрос: как новичку в Git, мне было интересно, есть ли способ вывести мой журнал git в файл, предпочтительно в каком-нибудь сериализованном формате, таком как XML, JSON или YAML.Есть предложения?

Ответы [ 5 ]

51 голосов
/ 05 января 2011

для вывода в файл:

git log > filename.log

Чтобы указать формат, как вы хотите, чтобы все в одной строке

git log --pretty=oneline >filename.log

или вы хотите, чтобы формат отправлялся по электронной почте с помощью такой программы, как sendmail

git log --pretty=email |email-sending-script.sh

для генерации JSON, YAML или XML похоже, что вам нужно сделать что-то вроде:

git log --pretty=format:"%h%x09%an%x09%ad%x09%s"

Эта сущность (не моя) отлично форматирует вывод в JSON: https://gist.github.com/1306223

Смотри также:

10 голосов
/ 18 декабря 2012

Я сделал что-то вроде этого, чтобы создать минимальный виджет веб-API / Javascript, который бы отображал последние 5 коммитов в любом репозитории.

Если вы делаете это из любого языка сценариев, вы действительно хотите сгенерировать свой JSON с чем-то отличным от " для вашего символа кавычки, чтобы вы могли экранировать реальные кавычки в сообщениях фиксации.(У вас будут они рано или поздно, и это нехорошо для того, чтобы что-то сломать.)

Так что я получил ужасающий, но маловероятный разделитель ^@^ и эту командную строку.

var cmd = 'git log -n5 --branches=* --pretty=format:\'{%n^@^hash^@^:^@^%h^@^,%n^@^author^@^:^@^%an^@^,%n^@^date^@^:^@^%ad^@^,%n^@^email^@^:^@^%aE^@^,%n^@^message^@^:^@^%s^@^,%n^@^commitDate^@^:^@^%ai^@^,%n^@^age^@^:^@^%cr^@^},\'';

Затем (в файле node.js) мое http-тело ответа строится из stdout вызова git log, таким образом:

var out = ("" + stdout).replace(/"/gm, '\\"').replace(/\^@\^/gm, '"');
if (out[out.length - 1] == ',') {
    out = out.substring (0, out.length - 1);
}

, и результат хорошийJSON, который не разрывается с кавычками.

3 голосов
/ 21 апреля 2014

Этот скрипт переносит журнал git и выдает вывод JSON: https://github.com/paulrademacher/gitjson

1 голос
/ 27 марта 2018

Я написал это в 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 видел, кто сделал коммит и почему.

0 голосов
/ 22 мая 2016

Вот https://github.com/dreamyguy/gitlogg, последний git-log => JSON парсер, который вам когда-либо понадобится!

Некоторые функции Gitlogg :

  • Синтезируйте git log из нескольких репозиториев в один JSON файл .
  • Введено repository ключ / значение.
  • Введено files changed, insertions и deletions ключи / значения.
  • Введено impact ключ / значение, которое представляет накопленные изменения для фиксации (insertions - deletions).
  • Очистить двойные кавычки " путем преобразования их в одинарные кавычки ' для всех значений, которые разрешены или созданы с помощью пользовательского ввода, например subject.
  • Почти все заполнители pretty=format:доступно.
  • Легко включать / исключать, какие ключи / значения будут анализироваться до JSON, комментируя / раскомментируя доступные.
  • Легко читаемый код, который тщательно прокомментирован.
  • Отзыв о выполнении скрипта на консоли.
  • Обработка ошибок (поскольку необходимо правильно указать путь к репозиториям).

Success, the JSON was parsed and saved. Успешно, JSON был проанализирован и сохранен.

Error 001 Ошибка 001: путь к репозиториям не существует.

Error 002 Ошибка 002: путь к репозиториям существует, но пуст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...