Я видел много советов о моделях git-ветвления, и наиболее распространенное мнение состоит в том, что внесение изменений непосредственно в основную ветку - плохая идея.
Один из наших сотрудников очень рад внести изменения непосредственно в основную ветку, и, несмотря на несколько разговоров, они вряд ли это изменит.
На данный момент я не могу убедить коллегу в том, что это плохая практика - работать непосредственно с мастером, но я хотел бы понять, что будет противоречить его способу работы, знать, когда мне нужно вернуться к нему. Эта проблема.
version-control
git
svn
branching
linuxunil
источник
источник
Ответы:
Есть несколько проблем, когда коммиты напрямую передаются мастеру
источник
Объясните ему, что новым функциям нужна собственная ветка разработки, которую можно развернуть в тестовой среде, прежде чем она будет запущена в производство.
В противном случае, вы находитесь в состоянии неполных функций. Вы не можете развернуть наполовину завершенные функции в производство, поэтому, если вы работаете непосредственно с основной веткой, все остальные должны подождать, пока вы не завершите свою функцию, прежде чем чьи-либо изменения могут перейти в производство, включая исправления ошибок.
Использование независимых ветвей для функций означает, что каждая новая функция может быть протестирована и развернута независимо от других.
источник
Мастер должен быть потенциально освобождаемым. Период. В мастере не должно быть никаких полу законченных работ (если не отключено с флагом функции)
При этом я видел, как некоторые команды усложняют свои выступления.
Не использовать PR при интеграции с мастером - ошибка, так как разработчики не могут выбирать, когда происходит интеграция.
Одна ветка разработки приносит очень мало пользы. Обычно это просто усложняет вещи. Многие функциональные ветви приносят большую ценность.
Создание веток для каждой среды (dev, test, prod) является ошибкой. Это выходит за рамки git и должно обрабатываться конвейером выпуска. Точно такая же сборка должна быть развернута во всех средах, что невозможно, если для каждой среды существуют ветви.
Если функция настолько велика, что она не может быть выполнена за день или два, вся работа над веткой функций должна быть в отдельных ветках и интегрирована с PR.
источник
источник
Во-первых, я хочу отметить, что в git каждая
pull
операцияpush
- это буквально операция ветвления, а каждая - слияние. Компьютерmaster
разработчика - это совершенно отдельная ветка отmaster
общего репо, которым вы делитесь, с равным положением с технической точки зрения. Иногда я буду переименовывать мою локальную версию вupstream
или что-то, если это лучше подходит для моих целей.Я подчеркиваю это, потому что многие организации думают, что они используют ветви более эффективно, чем ваш коллега, хотя на самом деле они делают немного больше, чем просто создают дополнительное имя для ветви по пути, которое в любом случае не будет сохранено в истории. Если ваш коллега фиксирует функции в одном элементарном коммите, отменить его так же легко, как и коммит слияния ветви функций. Подавляющее большинство функциональных ветвей должно быть очень коротким и в любом случае часто объединяться.
При этом главные недостатки его стиля работы - двоякие. Во-первых, это очень затрудняет совместную работу над незаконченной функцией. Тем не менее, не составит труда создать филиал в те моменты, когда необходимо сотрудничество.
Во-вторых, это делает обзор перед слиянием очень сложным. На данный момент вам не нужно его убеждать. Вы можете использовать такой инструмент, как github, gerrit или gitlab, требовать проверки кода запроса на извлечение и прохождения автоматических тестов для всех слияний. Если вы не делаете что-то подобное, честно говоря, вы не используете git в полной мере, и неудивительно, что ваш коллега не видит такого потенциала.
источник
pull
создаст новую ветку или какpush
операция слияния. Скорее,pull
это совершенно буквальноfetch
сопровождаемыйmerge
!master
ветвь отличается от другойorigin master
. Технически, это разные ветви на двух разных пультах, каждый со своей историей.pull
: До: две ветви, потенциально указывающие на разные коммиты - После: две ветви, указывающие на эквивалентные коммиты - Не создано ни одной ветви, поэтому я бы не назвал это «операцией ветвления». Если любая из двух команд, я бы назвалpush
это, потому что это потенциально создает новую ветку в удаленном. Что он не делает, это слияние.В других ответах уже упоминались различные преимущества (изолированные функции, всегда отправляемый код на мастере и т. Д.) Для работы НЕ на мастере напрямую.
Мне кажется, у тебя другая проблема. Очевидно, у вас нет процесса разработки, который согласован или используется всеми вашими разработчиками (или ваш разработчик полностью игнорирует этот процесс).
Есть ли у вас ветки функций, которые объединены в master, или у вас также есть разные ветки релизов, или вы используете совершенно другой процесс?
«Не используйте основную ветку» недостаточно.
источник
Это заставляет меня верить, что есть больше проблем. Работать над мастером или нет - это в основном часть большей философии о том, как, что и когда вы выпускаете продукты.
Таким образом, в тандеме с «вы никогда не должны работать над мастером», у вас есть тесты функций, вы тестируете работу друг друга, вы просматриваете код друг друга? Приемочные и интеграционные тесты.
Если у вас нет ничего из вышеперечисленного, и вы просто делаете это, чтобы «сделать мерзавец», вы можете также поработать над мастером.
источник
Нет никакой «плохой практики» в работе напрямую в филиале. Но вы должны решить, что лучше всего поддерживает ваш процесс:
Вопрос 1: должен ли ваш мастер представлять текущее состояние выпуска вашего программного обеспечения? Затем вы должны представить глобальную ветку разработки и объединить разработку в конце разработки релиза.
Вопрос 2: Хотите ли вы иметь процесс проверки кода? Тогда у вас должны быть «функциональные ветки», которые будут объединены с главной (или развиваться, если у вас есть) с помощью запросов на извлечение.
Вопрос 3: Нужно ли передавать промежуточное состояние кода другим разработчикам, которые еще не должны быть опубликованы в производстве (или тестировании)? В этом случае более чем один разработчик разрабатывает функцию. Затем вы должны ввести «функциональные ветви».
источник