Git flow - создать ветвь функции из другой ветки функции

85

Я уже давно пользуюсь git flow. Мне любопытно узнать о конкретном случае использования.

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

Предположим, у меня есть билет PROJ-500, и я создаю для него функциональную ветку.

git flow feature start PROJ-500

Тогда я хочу , чтобы интегрировать билеты PROJ-501через PROJ-515INTO , PROJ-500прежде чем интегрировать все это в develop. Есть ли способ сделать что-то вроде

git flow feature start PROJ-511 -b PROJ-500

Затем со временем эти подзадачи завершаются, и когда их функция завершается, ветка объединяется PROJ-500.

git flow feature finish PROJ-511

Приведенная выше команда объединится PROJ-511сPROJ-500

И как только все подзадачи будут выполнены, PROJ-500они будут завершены и объединены в develop.

Таким образом, новая функция веб-сайта интегрируется в разработку как единое целое, а не по частям.

Pymarco
источник
Это не так? git flow feature start PROJ-511 PROJ-500? Ссылка, которую вы разместили в комментарии к ответу DerekS, предполагает, что это должно быть.
Пол Хикс

Ответы:

119

Вы можете создать ветку подфункции через

git flow feature start PROJ-511 feature/PROJ-500

Но вы не можете использовать инструмент GitFlow для слияния ветки обратно в основную функциональную ветку, потому что если вы это сделаете

git flow feature finish PROJ-511

объект будет объединен в develop. Подфункции Ergo не поддерживаются , вам нужно сделать это вручную.

Альтернативы: это требование не ново. Существует нерешенная проблема, а также проект форка, утверждающий, что поддерживает функции финишной обработки в другие ветви, кроме develop. Я также нашел запрос на перенос с реализацией этой функции. Вы можете попробовать эту модификацию и посмотреть, нравится ли она вам.


Обновление 2019-12-13: как только что упомянул пользователь Матей Кржиж в своем комментарии, пользователь Тони Чемит написал здесь ответ через несколько месяцев после моего, указав на gitflow-avh как на альтернативу исходному продукту gitflow. Он поддерживает подфункции прямо из коробки с синтаксисом, показанным выше. Прошло несколько лет, и в настоящее время версия AVH является частью обычной установки Git для Windows, я просто проверил это на своем локальном компьютере и протестировал опцию дополнительной функции. Т.е. для пользователей Windows он работает сразу после установки Git.

kriegaex
источник
1
@pymarco: Спасибо, что приняли ответ. Мне любопытно: пробовали ли вы какие-нибудь альтернативы? Если да, то какой и каков был результат? Это работает как положено? Может быть, другие читатели смогут чему-то научиться на вашем опыте. :-)
kriegaex
Извините, но я не успел вернуться к этому. Я попробую в какой-то момент.
pymarco 05
3
Почему голос против? Голоса против предназначены для использования в плохо написанных, небрежных ответах, не свидетельствующих об исследованиях или знаниях. В любом случае, спасибо.
kriegaex 02
Если вы используете версию gitflow-avh, посмотрите ниже на stackoverflow.com/a/29353800/472611 @ tony-chemit answer
Matěj Kříž
12

Как уже упоминалось, мы можем запустить новую функцию, используя любую базовую ветку с

git flow feature start PROJ-511 feature/PROJ-500

И чтобы завершить работу с подфункцией, мы можем временно изменить конфигурацию потока git, чтобы использовать нашу ветку функции вместо develop:

git flow config set develop feature/PROJ-500 && git flow feature finish PROJ-511

Таким образом, git flow запускает все команды и проверки работоспособности. Наконец, чтобы восстановить конфигурацию, мы можем запустить

git flow config set develop develop 
Сезар
источник
9

Обновление (5 ноября 2020 г.): как указано в новом ответе здесь , это возможно с помощью gitflow-avh, который заменил исходный поток git.

===================

Оригинальный ответ:

Я не думаю, что в git flow есть способ для этого, но это довольно просто с помощью git.

git checkout PROJ-500
git checkout -b PROJ-511
...do your PROJ-511 work...
git checkout PROJ-500
git merge PROJ-511
git branch -d PROJ-511
Дерек С
источник
2
Спасибо Дереку за ответ. Да, я могу следить за этим рабочим процессом. Но git flow инкапсулирует ряд команд и проверок работоспособности, которые я предпочитаю использовать для разработки дополнительных функций. Например, вот ссылка на git-flow-feature - github.com/nvie/gitflow/blob/develop/git-flow-feature
pymarco