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/

)

Другие вопросы по тегам