Рейтинг:1

Git branching strategies with a small team to develop a Drupal site

флаг in

We're a small team (5-6 developers) building a Drupal 7 site. Previously, we've used Features (https://www.drupal.org/project/features) to export our configurations from development to production. We've relied largely on assigning developers discrete, unrelated tasks.

Our upcoming work has distinct, but related development. For example, I anticipate we'll need to add fields that will be used by two different tasks (for example, think about a date field for an event. One developer is working on the email invite and the other is working on the event display page). If we are able to anticipate this overlap, we'd be able to do this before either starts work.

However, if we don't realize a common need until after work has begun in separate branches per developer/feature, this becomes trickier. I believe that we would need to merge their branches together to access the common code-which defeats the point of us having separate branches in the first place.

Curious for what you'd suggest or has worked well in the past! Thanks!

Note: I've identified these potential solutions, both with drawbacks:

  • Cherry pick commits. While this could be helpful, it's also likely that a cherry-picked commit will include extraneous changes beyond the narrow scope needed here. And it's just as likely that the single commit won't include all of the changes necessary (For example, if one commit created the feature, and a second created the field, you'd need to cherry pick both commits). This all seems to head for a merge headache down the road.

  • Create a folder within sites/all/features/ignore, manually transfer the needed features there from the other branch. Include this directory in .gitignore. I don't like that:

  1. This has our team sending features files all over outside of git,
  2. That it could introduce dependency errors if features are changed in the original, but not updated in the other places that they are used,
  3. That users may make changes to the ignored features that aren't moved into git,
  4. That switching between computers/development environments would lose these files
  5. That all related branches would need to be merged before deploying to production (which again, undermines the point of branching since these branches are now dependent on each other and would have to be released at once, rather than when ready/needed).
  • Another option is to make the change (export the feature needed or cherry-pick commits) to the parent branch (e.g., Develop or Develop-Feature) so that it's available to all child branches.
Jaypan avatar
флаг de
Это не тот ответ, который вы ищете, но, честно говоря, я бы не советовал сейчас начинать новый сайт на Drupal 7. Его окончание срока действия — ноябрь 2022 года, всего через год, а то и позже. После этого Drupal 7 больше не будет получать обновления безопасности, а обновление с D7 -> D8 НЕ просто. Кроме того, API управления конфигурацией в D8 проще, чем функции D7 (https://www.morpht.com/blog/drupal-8-configuration-part-1-configuration-api). Я бы рекомендовал начинать новые сайты в D9. Почти каждый модуль уже обновлен с D8 до D9, так как процесс обновления значительно проще.
Grayson Cooper avatar
флаг in
Извините, что не разъяснил! Это не новый сайт. Я запускал новые сайты в D9 и согласен с тем, что это намного проще/лучше, и хотя D9 может делать 99% того, что нам нужно, 1% довольно важен (в основном связанный с правилами). Мы создаем вещи, дружественные к D9, чтобы смягчить проблемы миграции, а также пытаемся развить некоторые навыки в нашей команде, чтобы они чувствовали себя комфортно с D9 (включая, например, переход на git). Я предполагаю, что этот вопрос по-прежнему относится к сайтам D9 (за исключением функций), и кажется, что вишневые коммиты - идеальный подход.
leymannx avatar
флаг ne
Рассмотрите возможность компоновки сайта для управления вкладом и ядром. Предоставьте разработчикам возможность легко синхронизировать последнюю версию Live DB со своим локальным сайтом. Каждый раз, когда разработчик запускает новую ветку функций (или переключает ветки) или объединяет разработку с существующей веткой функций, он синхронизирует последнюю версию Live DB со своим локальным сайтом и должен запускать `composer install`, `drush updb` и `drush fra` . Держите функциональные ветки небольшими, каждый должен предоставить запрос на слияние/вытягивание со стабильным состоянием к концу рабочего дня. Игнорировать файлы сборки внешнего интерфейса из репозитория. Оставьте это КИ.
leymannx avatar
флаг ne
Сделайте скрипты Composer, пользовательские команды Drush, variable_get/_set() и hook_update_N() вашими лучшими друзьями.
Kevin avatar
флаг in
Я не могу думать о необходимости Правил как о блокаторе обновления. Вероятно, вы можете воссоздать многие из этих правил в нескольких строках кода/событий или использовать бизнес-правила.

Ответить или комментировать

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