Git путать при слиянии обновления с моим поддеревом
Ранее мы использовали множество подмодулей в наших основных хранилищах, но для повышения ремонтопригодности наших проектов мы начали экспериментальную ветвь, где мы заменили их на поддеревья.
Это сработало хорошо - но теперь, когда я пытаюсь обновить одно из поддеревьев, он ошибочно объединяет обновление в совершенно неправильный каталог, который даже не поддерево.
Основной репозиторий, где ветвь "поддерево" содержит экспериментальную ветвь, имеет следующий вид: git://github.com/hugowetterberg/goodold_drupal.git
Репозиторий для слияния обновлений: git://github.com/voxpelli/drupal-oembed.git
Слияние: git merge -s поддерево oembed/master
Путь обновления должен быть объединен с: сайтами /all/modules/oembed/
Путь, в который они объединены: модули/агрегатор/переводы/
Любой, кто имеет представление о том, как получить обновления в поддеревьях или что может быть ошибкой?
Ответы
Ответ 1
К сожалению, это ошибка (или отсутствующая функция) в коде git merge -s поддерева ". Он фактически догадывает поддеревья, которые вы хотите объединить. Обычно это волшебным образом оказывается правильным, но если ваше поддерево содержит много изменений (или было изначально пустым или что-то еще), то оно может выйти из строя эффектно.
Лучший способ обойти это:
-
Объедините файлы, как вы делали выше.
-
Вручную переместите все результирующие файлы туда, куда они должны были уйти.
-
git commit -a --amend
, чтобы исправить фиксацию слияния.
Будущие слияния, вероятно, будут работать нормально, если только этот каталог не находится в невероятном количестве потоков.
Экспериментальная git поддерево "имеет параметр --prefix
, который должен позволить вам переопределить это, но, к сожалению, это не (поскольку для этого требуется работать с функциями git merge -s subtree", и не было времени для этого).
В любом случае, это должна быть редкая ситуация, и обходной путь не понадобится даже для будущих слияний одного и того же проекта.
Ответ 2
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>
Обратите внимание, что в каталоге
нет конечной косой черты.
Спасибо apenwarr
http://git.661346.n2.nabble.com/PATCH-0-8-The-return-of-Xours-Xtheirs-Xsubtree-dir-td4069081.html