A project in SVN I'm working on (via git-svn) has frequently-created branches that are then --reintegrated with trunk, and then deleted.
Right now the project has about 10 branches that have not been deleted, but in git, git branch -r shows about 50.
I can remove these one at a time, checking whether they still exist in the svn repository but it's slow and tedious. Is there a way to sync my list of git remote branches with the svn repo?
No git remote prune origin will only delete the refs to remote branches that no longer exist. Git stores both local and remote refs. A repository will have local/origin and remote/origin ref collections.
The git branch command lets you create, list, rename, and delete branches. It doesn't let you switch between branches or put a forked history back together again. For this reason, git branch is tightly integrated with the git checkout and git merge commands.
This is a quick-n-dirty solution I made in a few minutes. It makes use of nice regex patterns that are not available everywhere.
This grabs a clean list of branches. I remove formatting spaces at the beginning of each line, and I'm ignoring tags for now:
git branch -r | sed 's|^[[:space:]]*||' | grep -v '^tags/' > git-branch-list
I grab a similar list of branches from svn, again removing formatting and trailing forward-slashes:
svn ls svn://path/to/branch/dir/ | sed 's|^[[:space:]]*||' | sed 's|/$||' > svn-branch-list
I diff the lists, find the lines that don't exist in the svn list anymore, remove the diff formatting, get rid of the "trunk" branch (which is a git-svn convenience) and save the results to a new list:
diff -u git-branch-list svn-branch-list | grep '^-' | sed 's|^-||' | grep -v '^trunk$' | grep -v '^--' > old-branch-list
Now I just perform standard branch removal procedures for git-svn:
for i in `cat old-branch-list`; do git branch -d -r "$i"; rm -rf .git/svn/refs/remotes/"$i"; done
There's probably better ways of doing this, but it works. Someone else is welcome to take this and improve on it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With