Как я могу преобразовать репозиторий Mercurial в Git (с поддержкой LFS)? - PullRequest
0 голосов
/ 03 марта 2019

У меня есть репозиторий Mercurial с 300-ю коммитами, который также содержит несколько относительно больших (скажем, более 10 МБ) файлов.Я хотел бы преобразовать это в Git-репозиторий, сохранить все ветви и слияния, а также использовать расширение LFS для управления большими файлами.Вот мой процесс на данный момент:

  1. Клонируйте репозиторий Hg со своего сервера, используя hg clone <URL>
  2. Создайте новое репозиторий git где-нибудь еще с git init
  3. cd в репозиторий git, затем конвертируйте с помощью hg-fast-export -r <hg-repo> -A <authors>.На данный момент у меня есть работающий репо, но все большие файлы все еще являются частью индекса.Я хочу вставить новый коммит в "перед" чем-нибудь еще, чтобы вставить файлы .gitignore и .gitattributes.
  4. Создать новую пустую ветку без родительского коммита: git checkout --orphan new-root && git rm -rf .
  5. Создайте два файла и передайте их в новую ветку.git add * && git commit -m "Check in git metafiles"
  6. Теперь мой «новый» корневой коммит готов к работе, поэтому я пытаюсь полностью искоренить все это: git checkout master && git rebase --root --onto new-root --preserve-merges

И вот где я застрял,Ребаз получает около 10 коммитов, прежде чем сбросить эту ошибку на меня.

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

Что меня действительно смущает, так это то, что в исходном репозитории Hg в этот момент нет слияния;первый коммит слияния - 15. Кроме того, при запуске git status перечисляется 50-60 измененных файлов, даже если этот конкретный коммит изначально затрагивал только 8 файлов.Наконец, использование git ls-files -u, чтобы попытаться увидеть, какие файлы конфликтуют, ничего не возвращает.

Поскольку большинство файлов, перечисленных в git status, являются изображениями в формате PNG, моей первой мыслью было, что LFS каким-то образом мешает ипытаясь вытащить большие капли во время перебазировки.Тем не менее, я запустил git lfs uninstall в глобальном контексте перед началом всего этого процесса, намереваясь выполнить git lfs migrate import --fixup после того, как я был удовлетворен операцией rebase.

Что вызывает эти конфликты слияния и как я могу это сделатьобойти это, чтобы закончить миграцию?

...