Стратегия ветку Git для небольшой команды разработчиков [закрыт]



У нас есть веб-приложение, которое мы обновляем и освободить почти ежедневно. Мы используем git в качестве наших VCS, и наша текущая стратегия ветвления очень проста и сломана: у нас есть главная ветвь, и мы проверяем изменения, которые мы "чувствуем себя хорошо" в ней. Это работает, но только до тех пор, пока мы не зарегистрируем разрывное изменение.



У кого-нибудь есть любимая стратегия git branch для маленькие команды который отвечает следующим требованиям:




  1. хорошо работает для команд от 2 до 3 разработчики

  2. легкий и не слишком много процесс

  3. позволяет разработчикам легко изолировать работу над исправлениями ошибок и более крупными функциями

  4. позволяет нам сохранить стабильную ветку (для тех моментов "о дерьмо", когда мы должны заставить наши производственные серверы работать)


В идеале, я хотел бы видеть ваш пошаговый процесс для разработчика, работающего над новой ошибкой

619   6  

6 ответов:

вы можете извлечь выгоду из рабочего процесса, описанного Скоттом Чаконом в Pro Git. В этом рабочем процессе у вас есть две ветви, которые всегда существуют,мастер и разработки.

мастер представляет собой наиболее стабильную версию вашего проекта и вы только когда-либо развернуть производство из этой ветки.

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

с разработки ветвь, вы создаете ветви темы для работы над отдельными функциями и исправлениями. Как только ваша функция/исправление будет готова, вы объедините ее в разработки, в этот момент Вы можете проверить, как он взаимодействует с другими ветвями темы, в которых ваши коллеги слились. Один раз разработки находится в стабильном состоянии, слить его в мастер. Он всегда должен быть безопасным для развертывания в производство из мастер.

Скотт описывает эти длительные ветви как" бункеры " кода, где код в менее стабильной ветви в конечном итоге "перерастет" в более стабильную после тестирования и общего одобрения вашей командой.

шаг за шагом, ваш рабочий процесс в рамках этой модели может выглядеть так:

  1. вам нужно исправить ошибки.
  2. создать ветку под названием myfix на основе разработки отделение.
  3. работайте над ошибкой в этой ветке темы, пока она не будет исправлена.
  4. слияние myfix на разработки. Запустите тесты.
  5. вы обнаружите, что ваше исправление конфликтует с другой веткой темы hisfix что ваш коллега слился в разработки пока вы работали над своим исправлением.
  6. внесите дополнительные изменения в myfix филиала для решения этих конфликтов.
  7. слияние myfix на разработки и снова запускать тесты.
  8. все работает нормально. Слияние разработки на мастер.
  9. развертывание в производство из мастер в любое время, потому что вы знаете, что это стабильно.

для получения более подробной информации об этом рабочем процессе, проверьте Ветвление Рабочих Процессов глава в 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

    Ничего не найдено.