Использовать 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 вашего пульта. Обычно апстрим не делают этого, потому что это мешает работе многих людей, но это возможно. В этом случае вам придется либо переписать свою собственную ветку (как правило, перебрасывая свои патчи на удаленную ветку и принудительно вставляя их в ваш пульт).