Local git clone clean up
janssens-geert at telenet.be
Tue Jun 10 06:27:15 EDT 2014
I'm writing this mostly as a references for other devs...
After John's recent cleanups in branches and tags I noticed my local git clone was still keeping
references to some branches and tags that are not longer in the public git repository. So I set
out to clean this up.
The most radical approach would be to remove my local clone and reclone the public repository.
That would certainly ensure full synchronisation, but I would also loose my local branches.
So in the end I did this:
- To remove all references to deleted remote branches in the public repository:
git fetch -p
Nice and easy.
- Then I noticed that all the remote branches were in my list twice, once as "remotes/origin/xyz"
and once as "remotes/xyz". The former are the references to the remote public git repository.
The latter I'm not really sure about. I guess they are leftovers from a remote I have removed at
some point or from the svn-git bridge we used to have.
git branch -d remotes/xyz
gives an error, as does
git branch -d xyz
(assuming xyz does not exist as a local branch, but in that case this is not the command to use
So to get rid of those I went directly into the hidden .git directory and manually removed these
Note that this will print a warning that "origin" can't be deleted because it's a directory. That's
precisely what I wanted because I want to keep the references to the "origin" repository. If you
want to play on the safe side, you are advised to delete the references in .git/refs/remotes one
by one, verifying each time if the correct branch reference has been deleted.
- Lastly I found there were still a lot of tags in my repository that were not (or no longer) in the
remote public repository. I haven't manually added any tags in my repository so they must be
the result of tags that got deleted remotely. It turns out that "git fetch -t -p" doesn't prune
deleted tags. In order to fix this I again used brute force: I first deleted *all* tags from my local
repository and then imported the tags from the remote repository:
for tag in $(git tag); do git tag -d "$tag"; done
git fetch -t --all
Only do this if you never created tags yourself or don't care losing your private tags !
The end result is a nice clean local clone with all my private branches still available...
More information about the gnucash-devel