Git log output en XML, JSON, ou YAML?

c'est une question assez simple: en tant qu'internaute novice de Git, je me demandais s'il y avait un moyen pour moi de sortir mon journal de git vers un fichier, de préférence dans une sorte de format sérialisé comme XML, JSON, ou YAML. Toutes les suggestions?

35
demandé sur Compass 2011-01-05 05:56:12

5 réponses

pour la sortie d'un fichier:

git log > filename.log

pour spécifier un format, comme vous voulez tout sur une ligne

git log --pretty=oneline >filename.log

ou vous voulez qu'il un format d'être envoyé via un programme comme sendmail

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

pour générer JSON, YAML ou XML il semble que vous devez faire quelque chose comme:

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

Ce gist (pas le mien) parfaitement les formats de sortie en JSON: https://gist.github.com/1306223

voir aussi:

48
répondu huntar 2017-05-23 12:02:05

j'ai fait quelque chose comme ça pour créer un minimum de widget api / javascript qui montrerait les 5 dernières propagations dans n'importe quel dépôt.

si vous faites cela à partir de n'importe quelle sorte de langage de Script, vous vraiment voulez générer votre JSON avec quelque chose d'autre que " pour votre caractère de citation, de sorte que vous pouvez échapper aux citations réelles dans les messages de propagation. (Vous sera tôt ou tard, et ce n'est pas agréable pour que ça casse les choses.)

alors j'ai fini avec le terrifiant mais improbable délimiteur ^@^ et cette ligne de commande.

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^@^},\'';

Ensuite (dans le nœud.js) mon corps de réponse http est construit à partir de stdout de l'appel à git log thusly:

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

et le résultat est nice JSON qui ne casse pas avec les citations.

10
répondu Tim Boudreau 2014-07-11 21:28:37

ce script enroule git log et produit la sortie JSON: https://github.com/paulrademacher/gitjson

3
répondu Paul Rademacher 2014-04-20 20:12:01

j'ai écrit ceci dans Powershell pour obtenir git logdata et enregistrer comme JSON ou autre format:

$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" 

les noms de têtes:

"s'engager","arbre","parent","références","sujet", de"corps","auteur","commiter"

doit être synchronisé avec datafields:

--pretty=format:'%H|%C|%P|%D|%s|%b|%|%cn;'

voir prettyformat docs .

Je choisis pipe / comme un séparateur. Je prends le risque qu'il ne soit pas utilisé dans le message de propagation. J'ai utilisé le point-virgule ; comme sep pour chaque commit. Je devrais bien sûr choisir autre chose. Vous pouvez essayer de coder une expression régulière intelligente pour vérifier si vos séparateurs sont utilisés dans le message de propagation. Ou vous pouvez coder plus complexe regularexpression pour correspondre à split point ou code un scriptlock powershell pour définir le split .

la ligne la plus dure du code était.

prettyGitLogDump.Remplacer("; ",';') -split ";", 0," multiline "

vous devez définir l'option multiligne parce qu'il peut y avoir CR/LF dans les messages et puis split stops - vous ne pouvez définir multiline si nr de split est donné. Donc deuxième paramvalue 0 qui signifie tout.

(Le Remplacer("; ",';') est juste un hack, je reçois un espace après le premier commit. Donc j'enlève l'espace après le séparateur de propagation. Il y a probablement une meilleure solution.)

quoi qu'il en soit je pense que cela pourrait être une solution viable pour les utilisateurs de windows ou les fans de powershells qui veulent que le journal de git pour voir qui a fait le commit et pourquoi.

1
répondu Patrik Lindström 2018-03-27 14:20:45

Voici https://github.com/dreamyguy/gitlogg , le dernier parser git-log => JSON dont vous aurez besoin!

certains de Gitlogg 's features are:

  • Parse git log de plusieurs référentiels dans un JSON fichier .
  • introduit repository clé/valeur.
  • Introduit files changed , insertions et deletions les clés/valeurs.
  • introduit impact clé / valeur, qui représente les changements cumulés pour l'engagement ( insertions - deletions ).
  • assainir les guillemets doubles " en les convertissant en guillemets simples ' sur toutes les valeurs qui permettent ou sont créées par entrée utilisateur, comme subject .
  • presque tous les espaces réservés pretty=format: sont disponibles.
  • inclut / exclut facilement les clés/valeurs qui seront interprétées à JSON en commentant/décommentant les clés / valeurs disponibles.
  • Code facile à lire qui est commenté en détail.
  • l'exécution du Script de la rétroaction sur la console.
  • traitement des erreurs (puisque le chemin vers les dépôts doit être réglée correctement).

Success, the JSON was parsed and saved. Succès, le JSON a été analysé et sauvé.

Error 001 Erreur 001: le chemin vers les dépôts n'existe pas.

Error 002 Erreur 002: chemin vers les dépôts existe, mais est vide.

-1
répondu Wallace Sidhrée 2016-05-22 18:18:44