I have just created a mercurial repo created from a heterogeneous ecosystems of other repos. Before I publish it to my co-workers, I want to clean it as much as possible. To this end, I'd like to entirely remove a few big old files from history (pretend they never existed), so repo will be smaller.
Is this possible with mercurial?
Once you decide that a file no longer belongs in your repository, use the hg remove command. This deletes the file, and tells Mercurial to stop tracking it (which will occur at the next commit). A removed file is represented in the output of hg status with a “ R ”.
If you see the help for hg rm --help : hg remove [OPTION]... FILE... Schedule the indicated files for removal from the current branch. This command schedules the files to be removed at the next commit.
Check out the convert
extension, particularly the --filemap
option.
Enable by adding the following to mercurial.ini
:
[extensions] convert =
Create a map of files to exclude:
exclude path/to/file1 exclude path/to/file2
Then convert the repo:
hg convert srcrepo destrepo --filemap <map>
Note there is a bug in Mercurial 2.1.1 causing an error with the above command:
initializing destination destrepo repository abort: invalid mode ('r') or filename
Just add the --splicemap <nonexistent file>
option to fix the problem.
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