Подтвердить что ты не робот

Git Оптимизация рабочего процесса

Глупый вопрос и относитесь ко мне как к новичкам к контролю версий.

Я новичок в Git (раньше я использовал subversion, но только основы). Я понимаю основы Git и его ветвящихся команд, у меня есть мнимая ситуация, в которой вам нужен ваш совет.

Предположим, что мое программное обеспечение в настоящее время находится в версии 1.2, стабильно и выпущено.

My Software
       v1.0
       v1.1
       v1.1.1
       v1.2 <- Current, Compilable and Released

Сценарий:

У меня есть два разработчика: Джон и Эрик.

  • Джон несет ответственность за исправления ошибок, сообщенные клиентами.
  • Эрик отвечает за новые функции, экспериментирует с ними и разрабатывает перегибы.

Это январь прямо сейчас.

Джон работает над множеством исправлений ошибок на основе версии v1.2. Каждый день он должен был вернуть свой код в репозиторий (GitHub), программное обеспечение не могло компилироваться в зависимости от его статуса.

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

Цель

  • В любой момент я могу вытащить стабильную, компилируемую версию v1.2
  • Февраль, я хочу, чтобы v1.3 был вытолкнут со всеми исправлениями ошибки Джона и в зависимости от того, будет ли Eric (по крайней мере, имеет базовую функцию), отпустите это также.

С GIT, что такое рабочий процесс?

Если я правильно понимаю Git, и Эрик и Джон должны создать свою собственную ветку, а в феврале их слить то, что работает с мастером?

Спасибо

4b9b3361

Ответ 1

Я бы установил две ветки интеграции в основном репозитории:

  • master: интеграция для новых функций (поддерживается Эриком)
  • 1.2-stable: ветвь интеграции для исправлений ошибок (поддерживается Джоном)

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

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

То же самое относится к Джону. Если, например, Джон должен исправить две проблемы (например, issue1 и issue2), у него должны быть фиксы-исправления-фикс-1 и fix-issue2. Эти ветки должны начинаться с кончика 1.2-стабильной ветки. После устранения одной из проблем, скажем, issue1, Джон может объединить финал fix-issue1 в 1.2-stable. Если коды в основных и 1.2-стабильных ветвях не слишком сильно расходятся, то, вероятно, было бы хорошей идеей для Эрика время от времени сливать ветвь 1.2-stable в master, чтобы включить накопленные исправления в следующую версию продукта.

Когда пришло время выпуска 1.3, Эрик должен убедиться, что накопленные исправления в 1.2-стабильных ветвях ветвей и готовых функций все были объединены в master. Затем он может просто пометить v1.3 и создать новую ветвь 1.3-stable.

Ответ 2

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

Что касается Криса Никола, рекомендующего перезагрузить вместо слияния, я бы поставил ту же осторожность, что и в Pro Git Скоттом Чаконом, который доступен читайте бесплатно онлайн, и я настоятельно рекомендую: "Не переустанавливайте фиксации, которые вы нажали в общий репозиторий". Поскольку "каждый день [Джон] обязан передать свой код обратно в репозиторий (GitHub)", я бы, вероятно, избежал перезагрузки, кроме тех случаев, когда они были использованы локально Джоном и Эриком.

Я бы порекомендовал вам прочитать раздел Ветвящиеся рабочие процессы в Pro Git, который описывает долговременные ветки и ветки тем, Вероятно, вам также следует взглянуть на раздел " Distributed Workflows ", в котором описываются централизованный рабочий процесс, рабочий процесс Integration-Manager и диктатор и Рабочий лейтенант.

Ответ 3

GIT очень гибкий, и вы можете адаптировать свое использование к вашему конкретному сценарию. Тем не менее, мне нравится подход, основанный на ветке, и я также предпочитаю "перестраивать" процесс слияния.

Функция Branch-per-feature означает, что вы создаете ветвь для каждой функции или дефекта, над которым вы работаете. Обычно ветвь живет только до тех пор, пока она разрабатывается и удаляется после ее объединения/переустановки с мастером.

Rebase означает, что вместо того, чтобы слияние ветки с мастером вы фактически вытаскиваете изменения из мастера вниз и помещаете их перед всеми изменениями, внесенными вами в вашу ветку. По сути, он объединяет HEAD с началом изменений вашего ветки. Похоже, что все изменения, которые вы слияния, начались после последней версии HEAD.

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

Наконец, последняя лучшая практика заключается в том, чтобы ваши коммиты были небольшими, специфичными для одной конкретной задачи или действия, чтобы каждая фиксация могла быть легко проверена другими и что было сделано быстро понятным. Затем Commits могут служить для документирования вашего прогресса и действий.

Ответ 4

Если я правильно понимаю GIT, и Эрик и Джон должны создать свою собственную ветку, а в феврале их слить то, что работает с мастером?

да

Ответ 5

Джон должен работать над мастером, Эрик должен работать над веткой с именем WYSIWYG или с соответствующей веткой.

Если вы хотите проверить, что может быть версии 1.3, вы должны нажать ветвь John master на новую ветвь, называемую стабильной, если у вас ее нет, если у вас уже есть стабильная ветка, просто снова слейте мастер в стабильную, это будет сделано каждый раз, когда вы захотите опубликовать некоторые исправления ошибок.

Если Eric закончен в ветки wysiwyg, слейте это тоже, а затем у вас есть сводная версия. вы затем архивируете/уничтожаете/игнорируете ветвь wysiwyg, поскольку она больше не нужна.