Is there a way in mercurial to remove old changesets from a database? I have a repository that is 60GB and that makes it pretty painful to do a clone. I would like to trim off everything before a certain date and put the huge database away to collect dust.
Share
You can do it, but in doing so you invalidate all the clones out there, so it’s generally not wise to do unless you’re working entirely alone.
Every changeset in mercurial is uniquely identified by a hashcode, which is a combination of (among other things) the source code changes, metadata, and the hashes of its one or two parents. Those parents need to exist in the repo all the way back to the start of the project. (Not having that restriction would be having shallow-clones, which aren’t available (yet)).
If you’re okay with changing the hashes of the newer changesets (which again breaks all the clones out there in the wild) you can do so with the commands;
You’ll probably have to do a little work to handle merge changesets, but that’s the general idea.
One could also do it using
hg convertwith typehgas both the source and the destination types, and using asplicemap, but that’s probably more involved yet.The larger question is, how do you type up 60GB of source code, or were you adding generated files against all advice. 🙂