gpt4 book ai didi

git - 获取特定年龄的git分支

转载 作者:IT王子 更新时间:2023-10-29 01:17:38 26 4
gpt4 key购买 nike

我的组织广泛使用 git 分支。结果,我们在过去的一年里制作了 2000 多个分支机构。我们现在正在尝试采用一种策略来清理所有特定年龄的旧分支。我知道如何删除分支,但我找不到一种直接的方法来列出所有具有给定年龄负责人的分支。计划是设置一个 cron,定期删除给定年龄的所有分支,但某些列表上的分支除外。

有没有人试过这样的事情?

最佳答案

使用提交者日期的答案是一个很好的方向......如果你想删除指向旧提交的分支。但是您可能想删除实际上是旧的分支;如果您今天创建一个指向去年提交的分支,您不希望它被删除!

因此,您想改为检查刷新日志日期。

您可以使用 git reflog show --date=local mybranch 获得人类可读的表单:

8b733bc mybranch@{Tue Mar 22 13:21:49 2011}: commit: foo
7e36e81 mybranch@{Tue Mar 22 13:21:25 2011}: commit: bar
99803da mybranch@{Tue Mar 22 13:20:45 2011}: branch: Created from otherbranch

(您可能还喜欢--date=relative)

顶部的条目是该分支上发生的最新事件,因此这是我们关心的部分。不幸的是,没有日期的日志格式占位符,所以为了只获取日期,我们做了一些工作:

git log -g -n 1 --date=local --pretty=%gd mybranch | sed 's/.*{\(.*\)}/\1/'
# Prints "Mon Mar 21 13:23:26 2011"

当然,对于脚本而言,这不是很有用,所以让我们继续获取纪元时间:

git log -g -n 1 --date=raw --pretty=%gd mybranch | sed 's/.*{\(.*\) .*/\1/'
# Prints 1300731806

现在我们有所进展!

#!/bin/bash
cutoff_date=$(date --date="July 23, 2010" +%s)
git for-each-ref refs/heads --format='%(refname)' | while read branch; do
reflog_date=$(git log -g -n 1 --date=raw --pretty=%gd $branch -- | sed 's/.*{\(.*\) .*/\1/')
if [ -n "$reflog_date" && "$reflog_date" -lt "$cutoff_date" ]; then
git branch -D ${branch#refs/heads/}
fi
done

示例脚本!我使用 date 将截止日期转换为人类可读的日期,然后对于每个分支,我检查 reflog 的最后日期是否在截止日期之前,如果是,则删除该分支。您可以在此处添加针对白名单的检查,以免意外删除您关心的内容。 (编辑:如果分支超过 90 天,这不会删除它们,因为它们的 reflogs 已经是空的......在那种情况下你想做什么,真的取决于你。你可以回到检查提交者日期,此时应该是非常安全的。)

编辑:这是另一种方法。在截止时间使 reflog 过期,然后删除 reflog 为空的分支。这里的问题是,如果截止时间早于您的 reflogs 已经过期的时间(90 天),它实际上只会删除早于 90 天的分支。当然,您可以解决这个问题。

#!/bin/bash

# Git lets you use very readable time formats!
cutoff_time="1 year ago"
# other examples:
# cutoff_time="July 23, 2010"
# cutoff_time="yesterday"

git for-each-ref refs/heads --format='%(refname)' | egrep -v 'master|other-whitelisted-branch' |
while read branch; do
git reflog expire --expire="$cutoff_time" $branch
if [ "$(git reflog show -1 $branch | wc -l)" -eq 0 ]; then
git branch -D ${branch#refs/heads/}
fi
done

关于git - 获取特定年龄的git分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5396381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com