У меня есть репозиторий Mercurial с 300-ю коммитами, который также содержит несколько относительно больших (скажем, более 10 МБ) файлов.Я хотел бы преобразовать это в Git-репозиторий, сохранить все ветви и слияния, а также использовать расширение LFS для управления большими файлами.Вот мой процесс на данный момент:
- Клонируйте репозиторий Hg со своего сервера, используя
hg clone <URL>
- Создайте новое репозиторий git где-нибудь еще с
git init
cd
в репозиторий git, затем конвертируйте с помощью hg-fast-export -r <hg-repo> -A <authors>
.На данный момент у меня есть работающий репо, но все большие файлы все еще являются частью индекса.Я хочу вставить новый коммит в "перед" чем-нибудь еще, чтобы вставить файлы .gitignore
и .gitattributes
. - Создать новую пустую ветку без родительского коммита:
git checkout --orphan new-root && git rm -rf .
- Создайте два файла и передайте их в новую ветку.
git add * && git commit -m "Check in git metafiles"
- Теперь мой «новый» корневой коммит готов к работе, поэтому я пытаюсь полностью искоренить все это:
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.
Что вызывает эти конфликты слияния и как я могу это сделатьобойти это, чтобы закончить миграцию?