52 lines
1.5 KiB
Bash
52 lines
1.5 KiB
Bash
#!/bin/bash
|
|
|
|
# Define the cut-off date, 3 months from now
|
|
cutoff=$(date -v-2m +%s)
|
|
branches_to_delete=()
|
|
outdated_branches_with_change=()
|
|
|
|
echo "| 分支名 | commits 数量 | 作者 | 最后更新时间 | log |"
|
|
echo "| ----- | ----- | ----- | ----- | ----- |"
|
|
|
|
# Get all remote branches
|
|
|
|
for branch in $(git for-each-ref refs/remotes/origin --format '%(refname:short)'); do
|
|
# Skip branches with 'release/' in their name
|
|
if [[ $branch == *'release/'* ]]; then
|
|
continue
|
|
fi
|
|
|
|
# Get the date of the last commit on the branch
|
|
last_commit=$(git log -1 --pretty=format:%ct $branch)
|
|
|
|
# If the last commit is older than the cutoff date, delete the branch
|
|
if [ $last_commit -lt $cutoff ]; then
|
|
# Check if there are commits that are not merged into master
|
|
if [ "$(git log origin/master..$branch)" != "" ]; then
|
|
commits=$(git log --pretty=format:'%an' origin/master..$branch)
|
|
echo "| $branch | $(echo "$commits" | wc -l) | $(echo "$(git show -s --format="%an | %ci | %s" origin/master..$branch )" | head -n 1) |"
|
|
outdated_branches_with_change+=("$branch")
|
|
else
|
|
branches_to_delete+=("$branch")
|
|
fi
|
|
fi
|
|
done
|
|
|
|
echo "these branches should be deleted:\n"
|
|
|
|
for branch in "${branches_to_delete[@]}"
|
|
do
|
|
echo "Deleting $branch"
|
|
git push origin --delete ${branch#origin/} --no-verify
|
|
done
|
|
|
|
echo "----------------------------------------------"
|
|
|
|
# echo "these branches outdated but with not commit changes:\n"
|
|
|
|
# for branch in "${outdated_branches_with_change[@]}"
|
|
# do
|
|
# echo "$branch"
|
|
# done
|
|
|