I have a Mercurial repo with 300-some commits in it that also contains a number of relatively large (say 10+ MiB) files. I’d like to convert this to a Git repository, keep all of the branches and merges, and also use the LFS extension to manage the big files. Here’s my process thus far:
- Clone the Hg repo from its server using
hg clone <URL>
- Create a new git repo somewhere else with
cdinto the git repo, then convert with
hg-fast-export -r <hg-repo> -A <authors>. At this point, I have a working repo, but all the big files are still part of the index. I want to wedge a new commit in “before” anything else to insert
- Make a new, empty branch with no parent commit:
git checkout --orphan new-root && git rm -rf .
- Create the two files and commit them to the new branch.
git add * && git commit -m "Check in git metafiles"
- Now my “new” root commit is ready to go, so I try to uproot the whole thing:
git checkout master && git rebase --root --onto new-root --preserve-merges
And this is where I’m stuck. The rebase gets about 10 commits in before dumping this error on me.
error: Your local changes to the following files would be overwritten by merge: assets/ui/sayscreen/blackarrow.png assets/ui/sayscreen/blackcircle.png assets/ui/sayscreen/thoughtbox.png assets/ui/sayscreen/translationbox.png assets/ui/sayscreen/whitearrow.png assets/ui/sayscreen/whitecircle.png Please commit your changes or stash them before you merge. Aborting fatal: cherry-pick failed Could not pick 01908b624e50709de07685ef8ab158feef02e9e0
What’s really confusing me here is that, in the original Hg repository, there is no merge at this point; the first merge commit is at 15. In addition, running
git status lists 50-60 modified files, even though this particular commit only touched 8 files originally. Finally, using
git ls-files -u to try and see what files are conflicted returns nothing.
Since most of the files listed by
git status are PNG images, my first thought was that LFS was somehow getting in the way and trying to pull out the large blobs during the rebase. However, I ran
git lfs uninstall in a global context before starting this whole process, with the intent of doing
git lfs migrate import --fixup after I was satisfied with the rebase operation.
What’s causing these merge conflicts, and how can I get around it to finish the migration?