如何提取Git文件历史的年份范围,便捷核对版权信息?
高效提取Git文件的版权修改年份/提交日期
我懂你这种痛点——要核对文件版权历史,一个个翻Git提交确实太折腾了!不用慌,这里有几个Git命令技巧,能直接帮你导出想要的信息,不用手动排查每一次提交:
一、直接生成文件修改年份的汇总列表
这个命令可以直接输出文件所有修改过的年份,自动去重并排序:
git log --follow --date=format:'%Y' --pretty=format:'%ad' <file-name> | sort -u
拆解一下关键参数:
--follow:跟踪文件重命名后的历史(如果文件改过名字,这个参数能帮你不遗漏历史记录)--date=format:'%Y':只提取提交日期中的年份部分--pretty=format:'%ad':让Git只输出格式化后的提交日期,去掉作者、提交信息等冗余内容sort -u:对提取到的年份去重,并且按从小到大排序
执行后你会得到清晰的年份列表:
2011 2012 2013 2015 2017 2018 2020
如果想要更贴近你理想的「2011-2015、2017、2018、2020」这种紧凑格式,可以搭配一个简单的awk脚本处理结果:
git log --follow --date=format:'%Y' --pretty=format:'%ad' <file-name> | sort -u | awk ' BEGIN { prev = ""; range_start = "" } { if (prev == "") { range_start = $0; prev = $0 } else if ($0 == prev + 1) { prev = $0 } else { if (range_start == prev) { printf "%s, ", range_start } else { printf "%s-%s, ", range_start, prev } range_start = $0; prev = $0 } } END { if (range_start == prev) { print range_start } else { print range_start "-" prev } }' | sed 's/, $//'
这个脚本会自动把连续的年份合并成范围,非连续的年份单独列出,最后用sed去掉末尾多余的逗号,输出就是你想要的简洁格式。
二、提取干净的提交日期列表
如果暂时不需要年份汇总,只想得到所有提交的日期(比如2020-02-02 2018-06-06…这种),用这个命令:
git log --follow --date=format:'%Y-%m-%d' --pretty=format:'%ad' <file-name> | sort -u
把日期格式改成%Y-%m-%d后,执行会输出去重后的完整日期列表:
2011-03-15 2015-07-22 2017-01-05 2018-06-06 2020-02-02
要是想保留每一次提交的日期(包括同一日期的多次修改),去掉sort -u即可:
git log --follow --date=format:'%Y-%m-%d' --pretty=format:'%ad' <file-name>
内容的提问来源于stack exchange,提问作者Joseph Wright
相关产品推荐
相关产品推荐

