Использовать git для управления исправленной версией публичного проекта?

Я пытаюсь в git эмулировать то, что пользователи Subversion будут рассматривать как ветку вендора. В моем случае я использую исправленную версию Drupal, которая доступна через git. Поэтому я думаю, что правильнее всего сделать git-репозиторий с несколькими удаленными устройствами, как описано в разделе "Объединение двух удаленных репозиториев в Git".

Я хотел бы извлечь из Drupal-версии drupal.org версию Drupal и добавить ее в свое собственное Git-репо, где я буду применять патчи. Поэтому я клонирую свой репозиторий и добавляю drupal.org в качестве другого пульта, вот так.

git clone myrepo:drupal/core
git remote add drupal.org http://git.drupal.org/project/drupal.git
git checkout -b custom-7.x drupal.org/7.x
git pull drupal.org 7.30

Я считаю, что моя проблема проистекает из этой последней строки. Он тянет помеченную версию Drupal 7.x, которая не совпадает с кончиком ветви.

Затем я пытаюсь вставить Drupal 7.30 в свой репозиторий, и вот где он терпит неудачу.

git push -n origin
...
 ! [rejected]        custom-7.x -> custom-7.x (non-fast-forward)
error: failed to push some refs to 'git.electricgroups:drupal/core'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Ирония в том, что git дает 4 подсказки, но я до сих пор не понимаю.

Можно ли использовать git для управления моей исправленной версией Drupal? Есть ли лучший способ настроить его? Если нет, как мне пройти эту ошибку?

1 ответ

Git пытается сказать вам, что ваша удаленная ветка custom-7.x не может быть быстро перенаправлена ​​в состояние вашей локальной ветки custom-7.x. Это подробно объясняется во многих других местах (включая страницу руководства для git-push, на которую указывает последняя подсказка, но в основном сводится к тому, что в вашей удаленной ветви есть один или несколько коммитов, которых нет в вашей локальной ветви. Другими словами, коммиты в удаленной ветке не являются подмножеством вашей локальной ветки.

Есть несколько возможных причин этого, но с учетом информации невозможно определить, какая именно.

  • Вы сделали коммиты на ветке origin/custom-7.x. Я предполагаю, что локальная настройка Drupal - это весь смысл этой ветки, так что это довольно вероятный сценарий. Вместо того, чтобы основывать свою локальную ветку на drupal/7.x, создайте ее origin/custom-7.x. Затем объедините Drupal / 7.x в него. Возможно, вам придется решать конфликты. Толчок к происхождению.
  • Восходящая ветка 7.x была переписана с тех пор, как вы в последний раз помещали ее в custom-7.x вашего пульта. Обычно апстрим не делают этого, потому что это мешает работе многих людей, но это возможно. В этом случае вам придется либо переписать свою собственную ветку (как правило, перебрасывая свои патчи на удаленную ветку и принудительно вставляя их в ваш пульт).
Другие вопросы по тегам