Предпочтительная методология контроля версий - PullRequest
16 голосов
/ 20 января 2009

Я новичок в мире контроля версий / версий, и я старался изо всех сил читать, насколько это физически возможно, чтобы осмыслить различные методы, которые люди используют для своих собственных систем контроля версий / версий.

Одна вещь, которую я заметил, это довольно четкое разделение методов разработчиков на две (возможно, больше?) Группы: одна группа предпочитает держать свой ствол в всегда стабильном состоянии и выполняет все обслуживание и дальнейшую разработку в ветви, в то время как другие предпочитают делать все свое развитие в стволе и держать его в не очень стабильном состоянии.

Мне любопытно, что предпочитает сообщество в StackOverflow или есть ли у вас свои собственные методы.

Примечание. Если это поможет адаптировать ответы, я должен отметить, что я являюсь одним разработчиком (не более двух или трех других в одном проекте), который работает в основном в ASP.NET и SQL Server 2005 * 1007. *

Ответы [ 11 ]

14 голосов
/ 20 января 2009

Как я уверен, вы заметили, что, просматривая в Интернете ответы на эту тему, это одна из тех вещей, где лучшим ответом является "Это зависит", и, как указывалось в большинстве ответов, это компромисс между тем, насколько просто вы хотите иметь возможность фиксировать / объединять новый код, и управлять обширной историей версий, которую вы можете легко откатить для поддержки или отладки.

Я работаю в небольшой компании, что означает, что в любой момент времени у нас может быть 3 или 4 разных версии кода на машинах разработчика, которые еще не были добавлены в репозиторий. Мы используем TortoiseSVN для нашей системы контроля версий, что дает нам возможность без особых затруднений выполнять ветвление / слияние, а также довольно просто просматривать журнал обновлений или возвращать наши локальные копии в более раннюю версию.

Исходя из вашего вопроса, я полагаю, что мы попадаем в группу разработчиков, которые всегда стараются сохранить стабильный Trunk, и мы разветвляем новый код и тестируем его перед слиянием обратно в Trunk. Мы также прилагаем усилия к тому, чтобы сохранять «снимки» каждого выпуска версии, чтобы при необходимости мы могли легко проверить более раннюю версию и пересобрать ее, не добавляя никаких новых функций, предназначенных для будущего выпуска (это также является отличным механизм для отслеживания ошибок, так как вы можете использовать более ранние версии кода, чтобы помочь определить, когда конкретная ошибка была впервые введена в ваш код, однако следует помнить, что ваше приложение ссылается на общий код, который поддерживается отдельно от вашей версии. код, вам нужно будет отслеживать это тоже!).

В хранилище он выглядит примерно так:

  • Магистральные

    • v1.0.1.x Release
    • v1.0.2.x Release

      • v1.0.2.x Исправление ошибки A <- (Они возвращаются в магистраль, но остаются в репо) </em>
      • v1.0.2.x Исправлена ​​ошибка B
    • v1.1.1.x Release

    • v1.2.1.x Разработка <- (Это будет объединено с магистралью и заменено папкой выпуска) </em>

      • v1.2.1.x Новая функция A <- (они возвращаются в ветку разработки) </em>
      • v1.2.1.x Новая функция B

Когда я впервые начал работать в компании, структура нашей версии была не такой сложной, и, по моему опыту, я бы сказал, что если вам нужно что-либо отслеживать в более ранних версиях, то стоит приложить усилия что-то вроде этого вместе (как я уже говорил ранее, это не обязательно должно выглядеть точно так, пока это соответствует вашим индивидуальным потребностям), храните это хорошо документированным, чтобы все участники могли поддерживать его (альтернатива - завершение создателя «нянчить» репо, который быстро становится невероятной тратой времени), и поощрять всех ваших разработчиков следовать им. Вначале может показаться, что нужно приложить немало усилий, но вы оцените это в первый раз, когда вам понадобится воспользоваться этим.

Удачи!

6 голосов
/ 20 января 2009

Я делаю все свои разработки в багажнике. Я один разработчик и не хочу иметь дело с проблемами ветвления. Когда мой код стабилен, я просто отмечаю текущую версию. Например, я бы пометил версии 1.0, бета-версию 2.0, версию-кандидата 2.0, версию 2.0 и т. Д. Вероятно, ветвление будет лучшей альтернативой, если вы поддерживаете старые версии для исправления ошибок и поддержки, но так как я не делаю этого, я не не беспокойся об этом.

4 голосов
/ 20 января 2009

Различия могут быть связаны с тем, насколько болезненным является слияние или нет в данной системе контроля версий.

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

2 голосов
/ 20 января 2009

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

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

2 голосов
/ 20 января 2009

Я всегда использовал основной ствол в качестве заголовка кода. Как правило, новый код разработки идет там.

Мы разрабатываем релизы, и мы можем переходить к «большому» дестабилизирующему эксперименту.

Когда мы исправляем ошибки, они сначала входят в main, а затем при необходимости объединяются (переносятся обратно) в соответствующую ветку версии.

Если большой эксперимент удался, он снова сливается с основным.

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

2 голосов
/ 20 января 2009

Всегда стабильно. Даже если я один разработчик - особенно если я одинокий разработчик.

Для меня сломанное дерево означает еще один способ узнать, что я должен делать.

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

1 голос
/ 20 января 2009

Одним из аспектов является то, как долго изменения будут в нестабильном состоянии.

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

Когда изменения, которые я делаю, не затронут других людей (потому что это мой личный код дома, а не код на работе), тогда я в порядке с проверкой в ​​нерабочих промежуточных состояниях, если это то, что я хочу. Иногда я делаю несколько проверок подряд, которые не стабильны; это нормально для меня, когда это касается только меня, и рабочий процесс будет непрерывным. Если я вернусь через несколько лет (а не через несколько дней), и у меня ничего не получится, то это станет проблематичным (один недостаток в том, что я был рядом так долго - у меня есть некоторые проекты, которые все еще работают в разработке и обслуживании, которые достаточно взрослые, чтобы голосовать).

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

1 голос
/ 20 января 2009

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

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

1 голос
/ 20 января 2009

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

1 голос
/ 20 января 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...