gpt4 book ai didi

json - 将 git 日志文件名解析为 json

转载 作者:太空狗 更新时间:2023-10-29 13:45:13 26 4
gpt4 key购买 nike

我使用以下代码获取在上次提交中更改的文件的名称:

git log -1 --stat

现在我想将结果解析为 JSON。我知道我可以使用漂亮格式将所有“git 日志”数据解析为 JSON (pretty-formats),如下所示:

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/},]/}]/'

但是有没有一种方法也可以将更改文件名解析为这个 JSON?

最佳答案

您可以执行以下操作:

function getcommit { \
git show --pretty="format:" --name-only $1 | \
perl -pe's/^\n//g;' | \
sed 's/\(.*\)/"\1"/g' | \
perl -0pe 's/\n(?!\Z)/,\n/g'; \
}

export -f getcommit

git log -1 --pretty=format:'{%n "commit": "%H",%n "author": "%an <%ae>",%n "date": "%ad",%n "message": "%f",%n "files": [ COMMIT_HASH_%H ]%n},' | \
perl -pe 'BEGIN{print "["}; END{print "]\n"}' | \
perl -pe 's/},]/}]/;s/COMMIT_HASH_(\w+)/`echo -n "";getcommit $1`/e'

基本上,我用哈希本身之前的固定字符串 COMMIT_HASH_ 替换了提交哈希,然后用 git show --pretty="format:"--name 的结果替换了这个哈希- 只有 $COMMIT_HASH

所有更改的文件都放入一个 json 数组“files”中。这适用于最后的 X 提交

这是 2 最后一次提交的示例:

[{
"commit": "1edcef90b42afee11fbd31dcc458ae0f15a3bb6e",
"author": "Bertrand Martel <......@gmail.com>",
"date": "Tue Oct 13 17:35:34 2015 +0200",
"message": "update-readme",
"files": [ "README.md",
"device.png",
"screenshot.png"
]
},
{
"commit": "8aa2ce64e58b770122a3561b8ef41d807ce36abc",
"author": "Bertrand Martel <......@gmail.com>",
"date": "Mon Oct 12 19:36:18 2015 +0200",
"message": "fix-async-bluetooth-command-bug-bluetoooth-state-check",
"files": [ "android/app/src/main/java/fr/bmartel/android/bluetooth/BluetoothCustomManager.java",
"android/app/src/main/java/fr/bmartel/android/bluetooth/GattTask.java",
"android/app/src/main/java/fr/bmartel/android/bluetooth/GattUtils.java",
"android/app/src/main/java/fr/bmartel/android/bluetooth/IBluetoothCustomManager.java",
"android/app/src/main/java/fr/bmartel/android/bluetooth/IBluetoothManagerEventListener.java",
"android/app/src/main/java/fr/bmartel/android/bluetooth/ICharacteristicListener.java",
"android/app/src/main/java/fr/bmartel/android/bluetooth/IDevice.java",
"android/app/src/main/java/fr/bmartel/android/bluetooth/IDeviceInitListener.java",
"android/app/src/main/java/fr/bmartel/android/bluetooth/IScanListListener.java",
"android/app/src/main/java/fr/bmartel/android/bluetooth/connection/BluetoothDeviceAbstr.java",
"android/app/src/main/java/fr/bmartel/android/bluetooth/connection/BluetoothDeviceConn.java",
"android/app/src/main/java/fr/bmartel/android/bluetooth/connection/IBluetoothDeviceConn.java",
"android/app/src/main/java/fr/bmartel/android/bluetooth/listener/IPushListener.java",
"android/app/src/main/java/fr/bmartel/android/bluetooth/notti/INottiDevice.java",
"android/app/src/main/java/fr/bmartel/android/bluetooth/notti/INottiListener.java",
"android/app/src/main/java/fr/bmartel/android/bluetooth/notti/NottiDevice.java",
"android/app/src/main/java/fr/bmartel/android/bluetooth/shared/ActionFilterGatt.java",
"android/app/src/main/java/fr/bmartel/android/bluetooth/shared/ISharedActivity.java",
"android/app/src/main/java/fr/bmartel/android/bluetooth/shared/LeDeviceListAdapter.java",
"android/app/src/main/java/fr/bmartel/android/notti/NottiActivity.java",
"android/app/src/main/java/fr/bmartel/android/notti/NottiBtService.java",
"android/app/src/main/java/fr/bmartel/android/notti/NottiDeviceActivity.java"
]
}]

这是一个脚本,它在参数中获取提交索引并返回 json 信息,包括已更改的文件:https://gist.github.com/bertrandmartel/a4ed5d76562e74d77282

关于json - 将 git 日志文件名解析为 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34039484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com