我正在做一些数据挖掘研究,我需要能够从 git 存储库中提取所有文件名及其相关的更改日志,并将它们通过管道传输到文本文件。
我有兴趣解析每个文件的更改日志并找到与之关联的 bugzilla 错误 ID。
到目前为止,命令:
git log --stat > gitoutputlog1.txt
让我接近我想要的,但那里有很多我不想要的信息,并且可能会混淆我的解析器。
有人对 bash 脚本或命令有什么想法,可以具体而干净地做我想做的事吗?
我正在努力实现我对问题的理解。它可能不是您想要的,但我认为您可以从中得出确切的答案。
要获取所有文件名,您必须克隆存储库。
git clone http://github.com/{user}/{project} {dir_name}
现在,您可以编写一些这样的 shell 脚本
#!/bin/bash
FILES=/path/to/* #Give path to the directory you have cloned
for file in $FILES
do
# $file store current file name
git log $file --oneline >> somefile.txt
done
我直接将输出git log $file --oneline
放在输出文件中。您需要对其进行操作并提取 bugzilla id 并正确发送到输出文件。
因此,对于每个提交,您都需要所有已更改文件的列表,并且您需要提交消息中的错误编号。
doit() {
bugnumber=$(git cat-file -p $1 | your-message-parser-here)
git diff --name-only $1^! | xargs -n1 -d\\n echo $bugnumber
}
git rev-list | doit
git log --name-only
返回易于解析的格式,每个文件名都在单独的行上,并且没有任何花哨的格式。您还可以查看--format
参数,它接受一个格式字符串,其中%X
包含所有信息位的占位符。