所以我有这个代码片段,我想用它来过滤掉没有特定前缀的分支,以及超过3个月没有收到任何提交的分支,这样我就可以在以后将它们从远程中删除。
for k in $(git branch -r | awk -Forigin !'/\/Prefix1\/|\/prefix2\//'); do
if [ "$(git log -1 --before="3 month" $k)" ]; then
echo "$(git log -1 --pretty=format:"%ci, %cr, " $k) $k";
fi;
done
目前的问题是,当我运行这个我看到分支已收到提交3周前,5个月前,2个月前,1个月前等,我不能找出原因。
但如果我只跑:git log --before=“4个月”--pretty=format:“%ci,%cr,“它按预期工作。
有谁能给予我点指导吗?
1条答案
按热度按时间gdx19jrr1#
git log -1 [filters] $k
中的-1
将:git log [filters] $k
的历史记录因此,如果一个分支的历史记录中有一个3个月前的提交(我猜:你的任何分支都有),
git log -1 --before="3 month" $k
将总是显示1行--它的历史中第一个超过3个月的提交。您的前导
if [ ... ]
条件将始终为真。要解决这个问题,您可以限制提交的范围,只选择每个分支的前导提交:
[编辑]
另一个选项(如用户phd在this question的注解中所建议的)是列出每个分支及其最上面的提交日期,并且只保留日期低于4个月前的行:
git branch
的--format
选项记录在git help for-each-ref
中(此处为:--格式标志,此处:字段名称部分),如果您滚动到"字段名称“部分的底部,您将看到有关如何格式化日期字段的说明:
作为日期类型字段的一种特殊情况,您可以通过添加
:
,然后添加日期格式名称来指定日期格式(请参阅git-rev-list[1]
的--date
选项所取的值)。