Git выход журнала в XML, JSON или YAML?

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

Ответ 1

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

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"

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

См. также:

Ответ 2

Я сделал что-то вроде этого, чтобы создать минимальный виджет веб-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, который не разбивается с кавычками.

Ответ 4

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

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

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

Успех, JSON был разобран и сохранен. Успех, JSON был разобран и сохранен.

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

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