0

我正在做一些数据挖掘研究,我需要能够从 git 存储库中提取所有文件名及其相关的更改日志,并将它们通过管道传输到文本文件。

我有兴趣解析每个文件的更改日志并找到与之关联的 bugzilla 错误 ID。

到目前为止,命令:

git log --stat > gitoutputlog1.txt

让我接近我想要的,但那里有很多我不想要的信息,并且可能会混淆我的解析器。

有人对 bash 脚本或命令有什么想法,可以具体而干净地做我想做的事吗?

4

3 回答 3

0

我正在努力实现我对问题的理解。它可能不是您想要的,但我认为您可以从中得出确切的答案。

要获取所有文件名,您必须克隆存储库。

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 并正确发送到输出文件。

于 2013-04-16T18:54:02.757 回答
0

因此,对于每个提交,您都需要所有已更改文件的列表,并且您需要提交消息中的错误编号。

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
于 2013-04-20T14:23:31.450 回答
0

git log --name-only返回易于解析的格式,每个文件名都在单独的行上,并且没有任何花哨的格式。您还可以查看--format参数,它接受一个格式字符串,其中%X包含所有信息位的占位符。

于 2013-04-20T14:48:50.120 回答