Git запутался при объединении обновления в мое поддерево
-
19-09-2019 - |
Вопрос
Раньше мы использовали множество подмодулей в наших основных репозиториях, но для повышения удобства сопровождения наших проектов мы запустили экспериментальную ветку, в которой заменили их все поддеревьями.
Это сработало хорошо, но теперь, когда я пытаюсь обновить одно из поддеревьев, оно ошибочно объединяет обновление в совершенно неправильный каталог, который даже не является поддеревом.
Главный репозиторий, в котором ветка «поддерево» содержит экспериментальную ветку: git://github.com/hugowetterberg/goodold_drupal.git
Репозиторий для объединения обновлений из: git://github.com/voxpelli/drupal-oembed.git
Слияние, выполнив: git merge -s поддерево oembed/master
Путь, по которому должны быть объединены обновления: сайты/все/модули/oembed/
Путь, в который они объединены: модули/агрегатор/переводы/
У кого-нибудь есть идеи, как перенести обновления в поддеревья или в чем может быть ошибка?
Решение
К сожалению, это ошибка (или отсутствующая функция) в коде «git merge -s subtree».Это на самом деле догадки поддеревья, которые вы хотите объединить.Обычно это волшебным образом оказывается правильным, но если ваше поддерево содержит много изменений (или изначально было пустым, или что-то в этом роде), то оно может привести к впечатляющему сбою.
Лучший способ обойти это:
Объедините файлы, как вы это делали выше.
Вручную переместите все полученные файлы туда, где они есть. должен Ушел.
git commit -a --amend
чтобы исправить коммит слияния.
Будущие слияния, вероятно, будут работать нормально, если только этот каталог не будет постоянно меняться.
Экспериментальный»Поддерево git"команда имеет --prefix
параметр, который должен позволить вам переопределить это, но, к сожалению, на данный момент он не работает (поскольку он требует работы с функциями «git merge -s subtree», а времени на это не было).
В любом случае, это должна быть редкая ситуация, и обходной путь не понадобится даже для будущих слияний одного и того же проекта.
Другие советы
git версия 1.7.9.5
git pull -s subtree <remote name> <remote branch>
(слияние произошло не в тот каталог)
git reset --hard HEAD^
git pull -s subtree -Xsubtree=correct/directory <remote name> <remote branch>
Обратите внимание, что в каталоге нет косой черты.
Спасибо Апенварр
http://git.661346.n2.nabble.com/PATCH-0-8-The-return-of-Xours-Xtheirs-Xsubtree-dir-td4069081.html