我想得到一个表或csv(最终可视化)关于git存储库中的每个文件以及文件更改的每个日期。
预期输出
数字是每天包含该文件的提交数
Date1 file1 12
Date1 file2 4
Date2 file1 6
可能我应该通过所有提交迭代并以某种方式从每次提交中获取修改后的文件。你能帮帮我吗?
研究
对于迭代提交,我发现这个=> Git: want to iterate through all commits on branch, and list files in each commit
获取提交信息
git diff --name-only SHA1 SHA2
如何获取提交日期?
git show $commit
(这里我需要修改的所有文件和提交日期)
弄清楚如何将其输出为csv文件 可能这超出了范围,因为问题是Git。如果有人想帮忙,欢迎你。
进展:
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
答案 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