Стратегия ветку Git для небольшой команды разработчиков [закрыт]
У нас есть веб-приложение, которое мы обновляем и освободить почти ежедневно. Мы используем git в качестве наших VCS, и наша текущая стратегия ветвления очень проста и сломана: у нас есть главная ветвь, и мы проверяем изменения, которые мы "чувствуем себя хорошо" в ней. Это работает, но только до тех пор, пока мы не зарегистрируем разрывное изменение.
У кого-нибудь есть любимая стратегия git branch для маленькие команды который отвечает следующим требованиям:
- хорошо работает для команд от 2 до 3 разработчики
- легкий и не слишком много процесс
- позволяет разработчикам легко изолировать работу над исправлениями ошибок и более крупными функциями
- позволяет нам сохранить стабильную ветку (для тех моментов "о дерьмо", когда мы должны заставить наши производственные серверы работать)
В идеале, я хотел бы видеть ваш пошаговый процесс для разработчика, работающего над новой ошибкой
6 ответов:
вы можете извлечь выгоду из рабочего процесса, описанного Скоттом Чаконом в Pro Git. В этом рабочем процессе у вас есть две ветви, которые всегда существуют,мастер и разработки.
мастер представляет собой наиболее стабильную версию вашего проекта и вы только когда-либо развернуть производство из этой ветки.
разработки содержит изменения, которые находятся в процессе выполнения и могут быть не всегда готовы производство.
с разработки ветвь, вы создаете ветви темы для работы над отдельными функциями и исправлениями. Как только ваша функция/исправление будет готова, вы объедините ее в разработки, в этот момент Вы можете проверить, как он взаимодействует с другими ветвями темы, в которых ваши коллеги слились. Один раз разработки находится в стабильном состоянии, слить его в мастер. Он всегда должен быть безопасным для развертывания в производство из мастер.
Скотт описывает эти длительные ветви как" бункеры " кода, где код в менее стабильной ветви в конечном итоге "перерастет" в более стабильную после тестирования и общего одобрения вашей командой.
шаг за шагом, ваш рабочий процесс в рамках этой модели может выглядеть так:
- вам нужно исправить ошибки.
- создать ветку под названием myfix на основе разработки отделение.
- работайте над ошибкой в этой ветке темы, пока она не будет исправлена.
- слияние myfix на разработки. Запустите тесты.
- вы обнаружите, что ваше исправление конфликтует с другой веткой темы hisfix что ваш коллега слился в разработки пока вы работали над своим исправлением.
- внесите дополнительные изменения в myfix филиала для решения этих конфликтов.
- слияние myfix на разработки и снова запускать тесты.
- все работает нормально. Слияние разработки на мастер.
- развертывание в производство из мастер в любое время, потому что вы знаете, что это стабильно.
для получения более подробной информации об этом рабочем процессе, проверьте Ветвление Рабочих Процессов глава в Pro Git.
после прихода в качестве новичка пытается найти прямую стратегию, чтобы научить других разработчиков, которые никогда не использовали систему управления версиями. Это тот, который подходит http://nvie.com/posts/a-successful-git-branching-model/ я попытался использовать стандартный рабочий процесс GIT, который находится на man-страницах, но он немного смутил меня и мою аудиторию полностью.
за последние 6 месяцев мне только дважды приходилось исправлять конфликты. Я добавил шаги, чтобы всегда проверять после слияния и ' fetch и слейте" или 'pull -- rebase" много (один раз утром и во второй половине дня) при разработке функций. Мы также использовали github.com как центральное место, чтобы вытащить последний код.
(сделал мой комментарий выше это собственный ответ, как я должен был изначально.)
от Скотта Чакона из Github:
Как мы это делаем, что такое GitHub Flow?
- все в главной ветви развертывается
- чтобы работать над чем-то новым, создайте дескриптивно названную ветвь мастера (т. е.: new-OAuth2-scopes)
- зафиксируйте эту ветвь локально и регулярно подталкивайте свою работу к тому же ветку на сервере
- когда вам нужна обратная связь или помощь, или вы думаете, что филиал готов к слиянию, откройте pull-запрос
- после того, как кто-то другой рассмотрел и подписал особенность, вы можете объединить его в master
- как только он будет объединен и нажат на "master", вы можете и должны немедленно развернуть
читать всю статью для более подробной информации: http://scottchacon.com/2011/08/31/github-flow.html
обратите внимание, что "pull requests" - это изобретение Github, и это то, что запекается на их веб-сайте, а не сам Git:https://help.github.com/articles/using-pull-requests/
использовать
masterветвь как ветвь разработки и создать ветви выпуска для выполнения исправления ошибок.любые новые функции будут продолжаться
masterво время окна разработки (либо зафиксировано непосредственно, либо в виде ветвей темы с запросами pull, до вас-не показано на графике). Как только все запланированные функции будут реализованы, введите замораживание функций и выполните тестирование. Когда вы счастливы, отметьте выпуск наmasterкакv1.0.со временем ваши пользователи найду баги в
v1.0таким образом, вы хотите создать ветку из этого тега (например, назовите его после выпуска1.0) и исправить эти ошибки в отделения. Когда у вас есть достаточно исправлены ошибки, которые вы думаете, что это гарантирует новый релиз, а затем пометить его какv1.0.1и объединить его обратно вmaster.тем временем новое окно разработки может происходить на
masterветка, которая в конечном итоге будет помечена какv1.1.смыть и повторить.
это следует Семантическое Управление Версиями логика нумерации.
---------(v1.0)--------------------------------(v1.1)-----------------------------> master \ \ ---(v1.0.1)---(v1.0.2)---> 1.0 ---(v1.1.1)---(v1.1.2)---> 1.1
в VCS наличие только "главной" ветви быстро показывает ее пределы, потому что вы не можете одновременно выполнять все усилия по разработке на одной ветви.
Это означает, что вы должны знать когда в филиал.но в DVCS (как и в "децентрализованных" VCS), у вас также есть выпуск издания, С ветвями, которые вы держите локальными в своих репозиториях,и ветвями, которые вы толкаете или тянете.
в этом контекст, начните с определения ваших параллельных усилий по разработке и выберите процесс публикации (push/pull). Например (и это не единственный способ):
- prod-это общедоступная ветвь только для чтения с кодом в производстве. Каждый мог бы вытащить из него, чтобы:
- перебазируйте свою текущую разработку поверх нее (для локального тестирования или для интеграции в локальное РЕПО dev исправление, выполненное в репо prod в ветке prod)
- ветку делать новые возможности (из известного стабильного кода)
- ветвь для запуска следующей ветви выпуска (той, которая должна быть в производстве)
никто не должен нажимать непосредственно на prod (следовательно, только для чтения)- release-это ветвь консолидации для чтения и записи, в которой соответствующие коммиты выбираются как часть следующего выпуска.
Каждый может нажать на релиз, чтобы обновить следующий релиз.
Каждый может вытащить из релиза для обновления его / ее локальный процесс консолидации.- featureX-это частная ветвь чтения-записи (в том, что ее не нужно нажимать на Центральное РЕПО prod), и ее можно нажимать/тянуть между репозиториями dev. Он представляет собой средне-и долгосрочные усилия, отличающиеся от ежедневного dev
- master представляет текущий dev и толкается/тянется между репозиториями dev.
другие процессы управления релизами существуют, как это так вопрос свидетельствует.
прочитайте рабочий процесс Git ReinH для гибких команд здесь:http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html
Это очень хорошо работает для небольших команд. Цель здесь состоит в том, чтобы убедиться, что все, что может быть потенциально нестабильным, входит в какую-то ветвь. Только слейте обратно в master, когда вы будете готовы для всех, кто работает за пределами ветви функций, чтобы использовать его.
Примечание: эта стратегия вряд ли git специфична, но git делает реализацию этой стратегии довольно простой.
Comments