Git запутался при объединении обновления в мое поддерево

StackOverflow https://stackoverflow.com/questions/1306595

Вопрос

Раньше мы использовали множество подмодулей в наших основных репозиториях, но для повышения удобства сопровождения наших проектов мы запустили экспериментальную ветку, в которой заменили их все поддеревьями.

Это сработало хорошо, но теперь, когда я пытаюсь обновить одно из поддеревьев, оно ошибочно объединяет обновление в совершенно неправильный каталог, который даже не является поддеревом.

Главный репозиторий, в котором ветка «поддерево» содержит экспериментальную ветку: git://github.com/hugowetterberg/goodold_drupal.git

Репозиторий для объединения обновлений из: git://github.com/voxpelli/drupal-oembed.git

Слияние, выполнив: git merge -s поддерево oembed/master

Путь, по которому должны быть объединены обновления: сайты/все/модули/oembed/

Путь, в который они объединены: модули/агрегатор/переводы/

У кого-нибудь есть идеи, как перенести обновления в поддеревья или в чем может быть ошибка?

Это было полезно?

Решение

К сожалению, это ошибка (или отсутствующая функция) в коде «git merge -s subtree».Это на самом деле догадки поддеревья, которые вы хотите объединить.Обычно это волшебным образом оказывается правильным, но если ваше поддерево содержит много изменений (или изначально было пустым, или что-то в этом роде), то оно может привести к впечатляющему сбою.

Лучший способ обойти это:

  1. Объедините файлы, как вы это делали выше.

  2. Вручную переместите все полученные файлы туда, где они есть. должен Ушел.

  3. 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top