По большей части это обычный рабочий процесс, используемый с любой VCS, которую мы использовали до сих пор. С некоторыми (CVS, SVN) это сложнее, с GIT это тривиально. Тем не менее, у меня есть два замечания:
Во-первых, есть две школы мысли, когда дело доходит до тематических ветвей:
- Объединить их
- Перебазировать их
(1) это то, что статья, кажется, предлагает. Проблема коммитов слияния - это так называемые злые слияния . В частности, те, которые присоединяются к путям разработки, где функция изменила семантику в одной из ветвей, но автоматическое объединение не может исправить все вхождения в коде, поступающем из другой ветви. Введенные таким образом регрессии, как известно, трудно отлаживать. Как пользователь GIT, вы, как правило, можете быть более расслаблены в отношении регрессий, потому что вам нужно git bisect
автоматически находить их причины. Однако в описанной ситуации git bisect
укажет коммит слияния, который вам совсем не поможет.
(2) избегает этой проблемы, пытаясь поддерживать как можно более линейную историю. Те, кто выступает против ребазинга, утверждают, что это делает недействительным любое тестирование, которое вы могли провести до ребазинга.
Лично я твердо нахожусь в лагере (2), потому что я ценю достоверность git bisect
результатов больше, чем потенциальную потерю покрытия тестами, что легко компенсируется использованием надлежащей системы CI.
Во-вторых, я решил, что продвижение между разработчиками редко бывает хорошей идеей. Существуют проблемы безопасности, связанные с тем, что каждый может зайти в ваш ящик с ssh за загрузкой или запустить git-deamon локально, и, что более важно, в командах, которые не очень малы, упущение может быть довольно быстро потеряно.
Тем не менее, я все в пользу промежуточного репозитория (иногда также называемого « чистым» ), который позволяет подгруппам обмениваться своей незавершенной работой через центральный сервер, который, однако, отличается от основного (часто внешнего). лицом, если не публично). Как правило, каждая подгруппа будет поддерживать одну ветвь темы для себя, а система CI будет периодически выполнять слияния осьминогов всех ветвей темы в одну большую ветвь интеграции, жалуясь на конфликты и ошибки сборки.
git bisect
в качестве причины, чтобы сохранить стратегию Флэт.git bisect
одиночеством. Это происходит, когда функция A меняет функцию, которую также использует функция B. Все тесты пройдут как в A, так и в B до слияния, но после того, как тесты слияния могут прерваться из-за несовместимых изменений между A и B, ноgit bisect
не могут частично применить одну ветвь к другой, поэтому единственная подсказка заключается в том, что коммит слияния когда ошибка была введена.В настоящее время я нахожусь в процессе проведения масштабных и длительных рефакторингов (преобразования приложения из одного в другой инструментарий GUI) и выполнения успешного рабочего процесса, ориентированного на ребаз, потому что другие члены команды продолжают работать над новыми функциями:
В основном это две основные ветви:
master
новые функции иtoolkit-conversion
филиал. Самое важное правило простое: делайте вtoolkit-conversion
ветке только те вещи, которые имеют отношение к конверсии. Всякий раз, когда есть что-то, что может быть сделано вmaster
(старый инструментарий GUI), я делаю это там и перебрасываю своиtoolkit-conversion
изменения в новуюmaster
голову. Другое правило - держатьtoolkit-conversion
ветку довольно короткой. Поэтому я часто использую reset, cherry-pick и modify-commit и rebase, чтобы склеить принадлежащие меньшие коммиты к более крупным (которые в конце имеют ту же цель). Это также хорошо работает, когда я попробовал что-то, что не сработало, чтобы «отменить» изменение, или после того, как я переделал код с временным вспомогательным кодом.Я решил против слияния изменений из
master
вtoolkit-conversion
отрасль, потому что это будет сделать намного сложнее перебазироваться ранее фиксации держать ветку в чистоте и легко обзор. Кроме того, слияния могут привести к конфликтам, разрешение которых не так ясно, как при ведении чистой истории.Конечно, этот рабочий процесс также имеет недостатки. Наиболее важным является то, что он работает только для одного человека. Когда я когда-либо принудительно толкаю
toolkit-conversion
ветвь после того, как переместил ее в началоmaster
, становится трудно перенести ее в другой репозиторий (автоматическая перебазировка в ветку отслеживания часто приводит к конфликтам).В конце моя
toolkit-conversion
ветка остается короткой, чистой и легкой для проверки. Я не мог предположить, что делал это подобное мощно с, например, SVN.источник
В компании, в которой я сейчас работаю, какое-то время мы применяли один и тот же вариант ветвления. Мы также использовали scrum, поэтому мы делаем ветку для каждого рабочего процесса.
Единственная проблема, с которой мы столкнулись до сих пор, - это когда команда достаточно большая, и можно начать более одной истории, и эти истории зависят друг от друга, это становится своего рода беспорядком, чтобы объединить изменения между ветвями и обратно в мастера.
Кроме того, это оказалось заслуживающим доверия :).
источник
В настоящее время я занят адаптацией этого рабочего процесса. Я думаю, что это довольно хороший рабочий процесс, потому что он использует модель ветвления, в которой Git превосходит.
Единственным небольшим недостатком является то, что требуется некоторая дисциплина, чтобы сдерживать этот рабочий процесс и не пытаться использовать ярлыки.
Разработчики kohana также используют этот рабочий процесс, и им, похоже, он очень нравится.
источник
Мы используем аналогичный рабочий процесс на работе, но чуть менее сложный. Однако этот рабочий процесс очень вдохновляет меня, так как я читал эту статью много раз. У меня даже есть PDF-файл модели разветвления рядом с моим столом :)
Продуктивное. Как вы определяете производительность? Ну, на мой взгляд, очень важно иметь высокое качество, по крайней мере, постоянно пытаться достичь лучшего качества. Постоянное улучшение процесса и т. Д. Если вы можете создавать качественный код, от этого выиграет производительность. Таким образом, вопрос на самом деле: улучшает ли это качество программного обеспечения? И мой ответ на это определенно да.
Что мне больше всего нравится в этом типе модели ветвления, так это то, что она вводит ветви на разных уровнях качества. Чем правее на картинке, тем выше стабильность и выше качество. Основная ветвь является священной, и все коммиты на ней должны рассматриваться как стабильные версии программного обеспечения. Чем левее вы идете, тем больше эксперимента и тем ниже стабильность, которую вы получаете.
Как только вы протестируете новые функции и исправления ошибок, вы можете постепенно передавать их слева направо и, таким образом, перемещаться в коде с высоким качеством именно тогда, когда вы знаете, что код соответствует требованиям к качеству, которые вы предъявляете к коду. Ну, по крайней мере, теоретически, поскольку вы не можете проверить все на 100% и точно знать, что код не содержит ошибок, потому что он всегда будет иметь ошибки. Но это позволяет вам сохранять высокую уверенность.
Для программиста ничто не отстой больше, чем для работы в системе, в которой никто не уверен в коде, потому что они знают, что он просто отстой и что в нем есть куча ошибок.
Важно продумать модель ветвления, чтобы она соответствовала потребностям вашей организации. То, что эта модель хорошо работает для некоторых людей, не обязательно означает, что она оптимальна или желательна для других.
Всегда есть компромиссы и даже в этом случае. Одним из компромиссов является количество веток в зависимости от сложности. Вводя множество различных типов веток, вы увеличиваете сложность рабочего процесса. Например, было бы просто неправильно заставлять людей создавать новую ветвь функций, когда они пытаются исправить простую ошибку, изменив пару строк кода.
Мы все знаем, что ошибки более или менее сложны для решения. Таким образом, когда обнаруживается тривиальная ошибка, вы можете сократить сложность и администрирование, чтобы избавиться от лишних накладных расходов, и просто позволить людям выполнять непосредственные действия, например, в основную ветку или ветвь разработки. Но так как характер ваших исправлений становится все более сложным, стоит потратить дополнительные усилия на создание для них новых веток. Особенно, если вы не уверены в его размере и длине или хотите улучшить сотрудничество между вами и другими разработчиками.
Это, без сомнения, хороший подход, и он может подходить для большинства случаев, поскольку у большинства из нас есть похожие процессы разработки, но он может подходить не всем. Я настоятельно призываю вас продумать, как вы сейчас обрабатываете свой код, и попытаться создать модель ветвления, которая соответствует той, которая у вас уже есть.
Самый важный момент - начать работать с git, а все остальное будет следовать естественным образом. Начните с простого и постепенно улучшайте! Будь креативным!
ура
источник