Подтвердить что ты не робот

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

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

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

Основной репозиторий, где ветвь "поддерево" содержит экспериментальную ветвь, имеет следующий вид: git://github.com/hugowetterberg/goodold_drupal.git

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

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

Путь обновления должен быть объединен с: сайтами /all/modules/oembed/

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

Любой, кто имеет представление о том, как получить обновления в поддеревьях или что может быть ошибкой?

4b9b3361

Ответ 1

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

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

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

  • Вручную переместите все результирующие файлы туда, куда они должны были уйти.

  • git commit -a --amend, чтобы исправить фиксацию слияния.

Будущие слияния, вероятно, будут работать нормально, если только этот каталог не находится в невероятном количестве потоков.

Экспериментальная git поддерево "имеет параметр --prefix, который должен позволить вам переопределить это, но, к сожалению, это не (поскольку для этого требуется работать с функциями git merge -s subtree", и не было времени для этого).

В любом случае, это должна быть редкая ситуация, и обходной путь не понадобится даже для будущих слияний одного и того же проекта.