git subtree error "роковое: отказ от слияния несвязанных историй"
Я пытаюсь понять, как работает "git subtree". Я следовал всем указаниям на этой странице, но всегда получаю сообщение об ошибке при попытке объединить проект поддерева с моим собственным репо ("Шаг 2"): fatal: refusing to merge unrelated histories
,
Я прочитал этот пост, и когда я использую --allow-unrelated-histories
вариант, вроде бы нормально работает. Однако я не уверен, должен ли я использовать это... У меня сложилось впечатление, что весь смысл поддеревьев состоит в том, чтобы иметь несвязанные истории в одном репозитории, поэтому кажется странным добавлять эту опцию. Должен ли я все же добавить его или я что-то не так делаю?
Я использую GIT v2.9.3 на OSX 10.11.6
5 ответов
Это была ошибка в git, она была исправлена в https://github.com/git/git/commit/0f12c7d4d175bb0566208213b1b340b6794f305c
Смотрите также: https://www.spinics.net/lists/git/msg282340.html
Если поддерево было добавлено с помощью --squash
нужно также использовать --squash
когда ты тянешь
git subtree pull --prefix=<folder-goes-here> <remote-goes-here> <branch-goes-here> --squash
Что сработало для меня, так это использование
git merge
со стратегией поддерева:
git merge -s subtree -Xsubtree="$prefix" subremote/branch --allow-unrelated-histories
git subtree
использует что-то похожее на то, что под капотом.
Я боролся с этим некоторое время и думаю, что нашел решение.
Я новичок в Git, так что прости меня, если я использую неправильные имена для вещей.
Возможно, проблема связана с тем, что вы используете --squash
опция, когда вы запустили команду git subtree add.
Попробуйте удалить поддерево (удалите удаленный репозиторий и удалите все локальные файлы, подтвердите и отправьте). Затем переделать поддерево добавить без --squash
вариант.
Затем я перепрыгнул в свой репозиторий поддеревьев, внес некоторые изменения, зафиксировал и выдвинул, затем вернулся в свой основной репозиторий суперпроектов и выполнил команду git поддеревьев. Это дало мне ошибку об изменении рабочего дерева. Чтобы обойти это, я сделал git checkout master, затем git push, затем снова попробовал подтянуть поддерево. Это сработало.
Надеюсь, это поможет.
Я не эксперт.
Но я нашел кое-что. Первоначально я пытался просто нормально тянуть. Но я нашел это конкретное поддерево.
git subtree pull --prefix myPrefixname https://github.com/subTreeRepo.git master --squash
где master - название ветки, конечно
(от
https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/
)