Если вы используете git, наличие нескольких веток может быть полезным, даже если они мертвы. Вы можете отследить, в какой версии продукта была введена ошибка (разделить по версиям пополам), вы можете организовать свою работу для множества небольших команд. Вы можете понять, почему некоторые идеи не сработали, просто взглянув на мертвые ветки.
Главное — последовательность. Попробуйте сгруппировать ветки, чтобы они соответствовали вашему рабочему процессу. Вы можете, например, иметь
stable
— CI строит производство и/или постановку на основе этого
staging
- промежуточная сборка CI из этого
feature/*
- ветки для фич
hotfix/*
- запускается из промежуточной/стабильной ветки, используется для исправлений
experimental/*
— используется для функций НИОКР, которые могут не привести к чистому и поддерживаемому коду или могут быть заброшены на полпути.
Несколько основных советов здесь: http://nvie.com/posts/a-successful-git-branching-model/
Кроме того, если вы хотите, чтобы ваша команда быстро начала использовать хорошую структуру ветвей, попробуйте git flow: http://jeffkreefmeijer.com/2010/why-arent-you-using-git-flow/
О рефакторинге плохого кода других сотрудников. Вы можете использовать некоторые ветки refactor/*
, чтобы вы могли легко увидеть, что сломано, имея атомарные слияния/перебазирования в отдельной ветке. Конечно, иметь тесты ЧРЕЗВЫЧАЙНО полезно, но если вы не сделаете простой git bisect
, он покажет вам, кто и когда внес ошибку (и если вы напишете тест для проверки этой ошибки, который bisect будет использовать, у вас теперь есть значимый тест для добавления к вашему набору тестов).
Вывод таков: не бойтесь иметь много ветвей, просто держите их организованными. Слияния в большинстве случаев не так сложны, как говорят люди, и вы всегда можете отменить их (или отложить до следующего выпуска, если вы не используете модель непрерывной доставки).
РЕДАКТИРОВАТЬ: Под something/*
я подразумеваю наличие нескольких ветвей с общим префиксом something/
, таким образом имитируя структуру каталогов.
РЕДАКТИРОВАТЬ2: В SVN все по-другому, где ветвление и слияние не так уж и дешевы. Действовать с осторожностью ;)
EDIT3: рассмотрите возможность использования разных (под)репозиториев для разных модулей. Это может упростить разработку. Разработчики модулей интересуются только последней стабильной версией основного приложения, а модель ветвей ориентирована только на один модуль.
РЕДАКТИРОВАТЬ4: В: "Можете ли вы, возможно, подумать о том, чтобы поставить некоторые числа или формулы на пороге, ниже которого допустимо беспорядочное ветвление и выше, какие ветки лучше организовать?"
Конечно!
Формула (по моему скромному мнению) проста.
- иметь столько «грязных» веток локально, сколько хотите (просто не передавайте их другим людям или общим репозиториям)
- старайтесь не продвигать грязные ветки, если они не представляют ценности для других разработчиков. Если они уже есть в вашем общем репозитории, сохраните их и переименуйте (на ум приходит
legacy/*
или просто dirty/*
).
Думайте о них как о файловой структуре. У вас может быть много устаревших файлов, которые больше не нужны, но если вы храните их в организованном порядке, вы можете легко отделить архив от вашего рабочего набора.
Видя, как вам нравятся числа, вы, вероятно, хотели бы реальный вариант использования этих ветвей.
Позвольте мне привести вам пример PHP-проекта Symfony2 малого и среднего размера, над которым я работал.
Если у вас есть проект, который в течение 6-9 месяцев активно разрабатывается 5 разработчиками в гибкой (scrum) манере с демо-версией клиента каждые две недели, вы можете захотеть иметь ветки:
- на пользовательскую историю (для тесно интегрированных пользовательских историй это может быть плохой идеей), всего около 50 ветвей, думайте о них как о функциональных ветвях.
- на одного разработчика (по требованию, если разработчику нужно какое-то время над чем-то поработать), они приходят и уходят, но обычно в таких проектах у разработчиков меньше 3. Некоторые из них вообще не используют общедоступные ветки разработчиков и держат свои грязные ветки при себе.
- экспериментальный (неограниченное количество веток для исследовательских целей, например другой алгоритм или библиотека, используемая в модуле), около 7 веток, насколько я помню
- за спринт (объединено из пользовательских историй, полезно для демонстрации), около 10, это наша промежуточная/стабильная во время первоначальной разработки. Почему не теги? Теги тоже, но ветки, потому что легче применить исправление.
- исправления (обычно недолговечные, изолированные для облегчения сбора вишни), 3 вершины;)
- разное (обычно текущие общесистемные функции и/или ветки команды из 2-3 человек), около 10
Как видите, здесь тоже нет точного числа. Я сделал несколько проектов такого размера, и у большинства из них было около 70-80 веток (20-30 без веток пользовательской истории). Если они организованы логично и понятно, репозиторий кода легко просматривать.
С git рассмотрите также перебазирование вместо слияния, поэтому вы не получите пузыри слияния (ознакомьтесь с этой статьей http://stevenharman.net/git-pull-with-automatic-rebase).
person
Chris Hasiński
schedule
26.01.2013