Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GitHub历史记录为JSON,包含日期、名称注释和更改的文件_Json_Git - Fatal编程技术网

GitHub历史记录为JSON,包含日期、名称注释和更改的文件

GitHub历史记录为JSON,包含日期、名称注释和更改的文件,json,git,Json,Git,我试图以JSON格式输出一个文件夹的GitHub历史记录,其中包含作者、日期、注释和受影响的文件(路径)。我可以使用以下命令完成除文件外的所有操作: git log --pretty=format:'{%n "commit": "%H" %n "author": "%aN <%aE>",%n "date": "%ad", %n "message": "%f" %n },' $@ | perl -pe 'BEGIN{print "["}; END{print "]\n"}' | per

我试图以JSON格式输出一个文件夹的GitHub历史记录,其中包含作者、日期、注释和受影响的文件(路径)。我可以使用以下命令完成除文件外的所有操作:

git log --pretty=format:'{%n "commit": "%H" %n "author": "%aN <%aE>",%n "date": "%ad", %n "message": "%f" %n },' $@ | perl -pe 'BEGIN{print "["}; END{print "]\n"}' | perl -pe 's/},]/}]/' >log.json
git log --name-only --pretty=format:' {%n  "commit": "%H",%n  "author": "%aN <%aE>",%n  "date": "%ad", %n  "message": "%f", %n  "files": [' $@ \
    | perl -pe 's/^(\S.*)/     "$1",/' \
    | perl -0777 -pe 's/^/[\n/; s/,\n\n/\n ]},\n/; s/,$/\n ]}\n]/'
git log--pretty=format:'{%n“commit”:“%H”%n“author”:“%aN”,%n“date”:“%ad”,%n“message”:“%f”%n},$@| perl-pe“BEGIN{print”[“};END{print”]\n“}”| perl-pe“s/},]/}]/'>log.json
要获取文件名--name只能与log命令一起使用,但我无法在JSON中真正将其作为数组或“文件”获取。这就是我现在的处境:

git log --name-only --pretty=format:'{%n "commit": "%H" %n "author": "%aN <%aE>",%n "date": "%ad", %n "message": "%f" %n },' $@ | perl -pe 'BEGIN{print "["}; END{print "]\n"}' | perl -pe 's/},]/}]/' >log.json
git log--name only--pretty=格式:{%n“提交”:“%H”%n“作者”:“%aN”,%n“日期”:“%ad”,%n“消息”:“%f”%n},$@;perl-pe“BEGIN{print”[“};END{print”]\n“}”| perl-pe“s/},]/}]/'>log.json
这将产生:

{
  "commit": "GUID" 
  "author": "My name <my@email.com",
  "date": "Mon May 29 15:42:58 2017 +0300", 
  "message": "commit comment" 
},
/folder/subfolder/file.extention
/folder/file.extention
{
“提交”:“GUID”

“author”:“我的名字这里的主要技巧是将文件列表与生成的行分开,但是
--pretty=format:
参数。我建议缩进所有
--pretty=format:
行,这样文件就可以很容易地与
^(\S.*)
regex匹配

第二个技巧是从文件列表的最后一项中删除
,并添加结束括号。最后一项后面是一个空字符串,为了检测这种情况,您可以将整个输出作为单个字符串读取(使用
-0777
),并将其与
,\n\n
正则表达式匹配

相同的
-0777
功能允许我们通过分别匹配
^
$
来轻松插入开头
[
和结尾
]

最后,我们使用以下命令结束:

git log --pretty=format:'{%n "commit": "%H" %n "author": "%aN <%aE>",%n "date": "%ad", %n "message": "%f" %n },' $@ | perl -pe 'BEGIN{print "["}; END{print "]\n"}' | perl -pe 's/},]/}]/' >log.json
git log --name-only --pretty=format:' {%n  "commit": "%H",%n  "author": "%aN <%aE>",%n  "date": "%ad", %n  "message": "%f", %n  "files": [' $@ \
    | perl -pe 's/^(\S.*)/     "$1",/' \
    | perl -0777 -pe 's/^/[\n/; s/,\n\n/\n ]},\n/; s/,$/\n ]}\n]/'
git日志--仅限名称--pretty=格式:'{%n“提交”:“%H”、%n“作者”:“%aN”、%n“日期”:“%ad”、%n“消息”:“%f”、%n“文件”:['$@\
|perl-pe的/^(\s.*)/“$1”,/”\
|perl-0777-pe的/^/[\n/;s/,\n\n/\n]}、\n/;s/,$/\n]}\n]/'

查看问题和我为回答所做的修改谢谢@DmitryEgorov。由于某些原因,它不起作用,除了文件之外的所有内容都在执行时显示。我注意到您使用了%f,这在v3中的漂亮格式规范中找不到。我们可以在聊天会话中调试它,但您可能更愿意尝试我建议的方法在答案中。很好,正如我所寻找的,我稍微改变了格式:{%n“提交”:“%H”,%n“作者”:“%aN”,“日期”:“%ad”,“消息”:“%f”,“文件”;%n:“:”['$\\\\\\\ perl-pe's/^(\s.*)/“$1”,/'\\\\\ perl-0777-pe's^-[\n\n\n\124n],\124n]>