Another issue I commonly have to deal with in the multitudes of repositories I oversee and manage: stale git branches. Gitlab has a pretty good interface for pointing these out. The trouble here, is that it’s still a manual process to remove each of these branches. If you’ve got a team of any size working on numerous code bases, this can become a very time consuming process.
So, I wrote some code to solve my problem. This is the crux of it:
_maxage=$((60*60*24*90)) _time="$(date '+%s')" _starting_branch="$(git rev-parse --abbrev-ref HEAD)" # First, update everything git fetch --all \ && git gc --aggressive \ && git fsck --full for _branch in $(git branch -r -vv \ | awk '{print $1}' \ | grep -v '\*' \ | grep -E -v 'master|develop'); do echo "${_branch/origin\//}" git stash || true git reset HEAD git clean -f git checkout -f -q "${_branch/origin\//}" git pull -q origin "${_branch/origin\//}" _timestamp="$(git log "${_branch/origin\//}" \ -1 --date=unix \ --pretty='%at')" _diff=$((_time - _timestamp)) if [ ${_diff} -gt ${_maxage} ]; then echo "[${_branch/origin\//}] got one" git status git checkout develop git branch -D "${_branch/origin\//}" git push origin :"${_branch/origin\//}" fi done git checkout "${_starting_branch}"
As always, I welcome comments and feedback.