Git запутался при объединении обновления в мое поддерево - PullRequest
19 голосов
/ 20 августа 2009

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

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

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

Хранилище для слияния обновлений: git: //github.com/voxpelli/drupal-oembed.git

Объединение с помощью: git merge -s поддерево oembed / master

Путь, в который должны быть объединены обновления: sites / all / modules / oembed /

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

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

Ответы [ 2 ]

19 голосов
/ 20 августа 2009

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

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

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

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

  3. git commit -a --amend для исправления коммита слияния.

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

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

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

11 голосов
/ 19 сентября 2013

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

...