GIT:提取文件修改数据以进行分析

时间:2014-10-12 00:18:27

标签: git

我想得到一个表或csv(最终可视化)关于git存储库中的每个文件以及文件更改的每个日期。

预期输出 数字是每天包含该文件的提交数 Date1 file1 12 Date1 file2 4 Date2 file1 6

可能我应该通过所有提交迭代并以某种方式从每次提交中获取修改后的文件。你能帮帮我吗?

研究

进展:

for commit in $(git rev-list master) do # Get the author date git log -1 ${commit} --pretty="%ad" --date=short # get the files changes git diff --name-only ${commit}^! done | sort | uniq -c | sort -rn

1 个答案:

答案 0 :(得分:4)

Git中的日期通常并不意味着人们的想法或希望它们是什么。

每个提交都有2个与之关联的日期 - 作者日期和提交者日期。这两个都取自提交者的计算机时钟,它们都可以通过命令行覆盖。因此,它们并不是特别可靠的指标。

更大的问题是,它只是告诉您在创建或创作提交的原始存储库中记录的信息。当你在谈论有影响的DVCS时。如果我去年夏天提交了一些东西,然后今天将它推送到共享服务器,你会看到提交的最后一个夏天日期。那是你要的吗? (我猜是“不”)如果没有,那么你需要通过服务器上的接收挂钩设置一些东西来为你记录日期。

如果你想继续你的原始路径,那么我建议你沿着这些路线做点什么。从这开始。它将转储“日期文件”。然后你可以把它放到你想要整理结果的任何东西上(awk,perl,python等)。

for commit in $(git rev-list master)
do
    # Get the author date
    commitDate=$(git log -1 ${commit} --pretty="%ad" --date=short)
    # get the files changes 
    git diff --name-only ${commit}^! | xargs -n1 -I {} echo ${commitDate} {}
done