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 anyway) So to get rid of those I went directly into the hidden .git directory and manually removed these branch references: cd .git/refs/remotes rm * 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... Cheers, Geert _______________________________________________ gnucash-devel mailing list [email protected] https://lists.gnucash.org/mailman/listinfo/gnucash-devel
