Лучшие практики CVS / SVN для ветвления и тегов

Я буду нести ответственность за решение, как будет происходить ветвление по тегам в нашем репозитории CVS / SVN.

Есть ли литература, которая поможет мне понять, как лучше всего работать с CVS? либо ветвление / тегирование и т. д.?

Благодарность


person Joao Vilaca    schedule 21.01.2009    source источник


Ответы (13)


Мой личный опыт за более чем 10 лет работы в CVS над проектом FreeBSD: переключитесь на что-нибудь еще как можно быстрее. CVS ориентирована на файлы, а не на моментальные снимки / наборы изменений, что делает слияние между ветвями довольно болезненным. В любом случае ветки болезненны с CVS.

Что касается ресурсов для CVS, см. главную страницу CVS.

Если вы хотите поговорить о SVN, я бы предложил саму SVN Book и эту вопрос.

person Keltia    schedule 21.01.2009
comment
Я использовал CVS всего пару лет, но быстро пришел к такому же мнению. Когда мы начинали с нуля, мы использовали SVN и нашли его, хотя и не идеальным, но все же гораздо более предпочтительным. - person Marcus Downing; 21.01.2009
comment
Самая большая проблема, с которой я сталкиваюсь с CVS, заключается в том, что коммиты не гарантируются атомарностью. За этим следует много веселья. Просто используйте современный VCS ... SVN довольно хорош для большинства целей. - person rmeador; 21.01.2009
comment
Коммиты в CVS атомарны в том же каталоге (из-за блокировки), но не за его пределами. Последние версии (1.12) имеют идентификатор фиксации, хранящийся в файле RCS, но это все еще взлом. - person Keltia; 21.01.2009

Я бы рекомендовал прочитать две книги Pragmatic Programmer по SVN и CVS под названием "Прагматический контроль версий с использованием CVS" и "Прагматичный контроль версий с помощью Subversion ".

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

HTH

ваше здоровье,

Роб

person Rob Wells    schedule 21.01.2009

Я рекомендую вам SVN в Windows, Git в Linux. Не используйте CVS, имхо, это ужасно.

SVN Book - это то, что вам нужно в первую очередь.

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

person abatishchev    schedule 21.01.2009

Я считаю, что это от ужаса программирования:

Статья Криса Бирмеле о ветвлении и слиянии - лучшее введение, которое я нашел в этой важной задаче управления версиями. Есть десятки способов ветвления, но нет ни одного правильного способа сделать это. Ознакомьтесь со своими вариантами, чтобы знать, какие компромиссы можно найти с каждым из них.

Учебник по ветвлению и слиянию

person Jim T    schedule 22.01.2009

Разумные практические правила:

  • Пометьте каждую сборку (т. Е. Каждую сборку номером сборки - все, что вы можете отправить тестировщикам или кому-либо еще).
  • Разветвляйтесь каждый раз, когда вам нужно разветвляться.

Обычно вам нужно разветвлять выпущенные версии, чтобы вы могли тестировать и выпускать исправления. У вас могут быть другие причины для разветвления.

И вам определенно будет лучше с Subversion.

person Darcy Casselman    schedule 21.01.2009
comment
Пометить каждую сборку следует Пометить каждый выпуск? В лучшем случае каждый коммит строится, но тег для каждой ревизии не имеет особого смысла. - person Dirk Vollmar; 21.01.2009
comment
Думаю, лучше сказать: пометьте каждую публичную сборку. Сборка, которая уходит от разработчиков, для тестировщиков, пользователей и т. Д. - person abatishchev; 21.01.2009
comment
Я не вижу необходимости быть скупым, но если вы собираетесь быть скупым, то каждая публичная сборка, вероятно, подойдет. Если что-то пойдет не так при переходе от одной сборки к другой, будет проще откатиться, если вы пометили последнюю сборку. - person Darcy Casselman; 21.01.2009
comment
Вам не нужно помечать каждую сборку просто потому, что каждая ревизия уже является тегом с номером ревизии в качестве имени (см. svnbook.red-bean.com/en/1.1/ch04s06.html) - person Dirk Vollmar; 21.01.2009
comment
Что вы имеете в виду под каждой сборкой? Если я все делаю правильно, каждый номер ревизии - это сборка. Я могу отметить тегами каждую сборку, которая ускользает от разработки (которая в настоящее время включает некоторые из ночных сборников, в которых я работаю), но помимо этого мне интересно, используем ли мы сборку таким же образом. - person David Thornley; 21.01.2009
comment
В CVS номера ревизий не являются тегами, между разными файлами нет никакой связи. - person David Sykes; 23.01.2009
comment
Хорошо, да, если вы делаете правильную непрерывную интеграцию, тогда каждая фиксация - это сборка, и вам, вероятно, не нужно помечать каждую из них. Вы должны пометить каждую сборку, которая отправляется вашим тестировщикам или где-то еще. Все, что вам нужно присвоить номер сборки. - person Darcy Casselman; 23.01.2009
comment
вы должны разветвлять каждую функцию и каждую ошибку для себя как разработчика, и команда должна быть такой же… это не должно быть аргументом, просто сделайте это, вы увидите свет. - person PositiveGuy; 10.02.2012
comment
@CoffeeAddict Если бы я делал это, было бы глупо не использовать DVCS, например git или Mercurial. Вы можете создавать ветки функций с помощью svn, но количество трудностей, связанных с слиянием, означает, что вам лучше перейти на что-то, созданное для такого рода вещей. - person Darcy Casselman; 24.02.2012

Более поздние записи в Source Control HOWTO Эрика Синка описывают ветвление и слияние.

person Bill the Lizard    schedule 21.01.2009

Если вам нужен стартер на 10 для подрывной деятельности:

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

Используйте ветки разработки (ответвления от ствола) в сложных задачах разработки. Когда задача завершена, используйте слияние с повторной интеграцией, чтобы перенести изменения из ветви в ствол. Таким образом, у вас есть несколько конкретных коммитов в ствол вместо множества коммитов, связанных с одной и той же задачей. Удалите эти ветки разработки, когда они больше не нужны. Назовите их как FeatureX

Используйте ветки версий (опять же из магистрали) для управления маркетинговыми версиями, которые должны быть выпущены для клиентов / развернуты вживую. Версия - это подмножество ревизий в багажнике. Чтобы использовать их, выполните ответвление из ствола в соответствующей ревизии (может не быть головной), вручную запишите ревизии из ствола как объединенные в эту ветвь, выполните слияние любых дополнительных ревизий, которые вам нужны из ствола (только из ствола). Не разрабатывайте непосредственно в ветке версии, только слияние из ствола - хотя слияние может потребовать дополнительной работы, чтобы сделать его совместимым с версией. Назовите как "Версия 2.4"

Создавайте определенные теги из веток вашей версии всякий раз, когда вы делаете сборку или исправление, которое будет выпущено для клиентов или развернуто в реальном времени. Назовите как "2.4.1", "2.4.2" и т. Д.

Работая таким образом, вы можете использовать отслеживание слияния Subversion (версия 1.5 и выше), чтобы точно видеть, что находится в каждом теге в каждой ревизии на основе каждой ревизии. Для этого получите рабочую копию своего тега или ветки версии и выполните 'svn mergeinfo --show-revs merged http://svn/trunk c: \ workingcopy \ '

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

person Jim T    schedule 22.01.2009
comment
Вы говорите, что все изменения должны сначала идти в ствол и никогда не развиваться непосредственно в ветку версии. Я согласен, но как насчет исправления ошибок в ветке версии, код которой больше не доступен в магистрали (возможно, из-за очистки кода или удаления функции)? - person Fredrik Boström; 08.03.2010

Прочтите это: http://oreilly.com/catalog/practicalperforce/chapter/ch07.pdf

person zvolkov    schedule 15.04.2009

вам следует покинуть CVS. CVS старая и не очень быстрая с точки зрения ветвления / тегирования (создание веток / тегов линейно зависит от количества файлов в проекте)

Сначала вам следует подумать о своей стратегии ветвления: хотите ли вы, чтобы

  • стабильный багажник
  • ветки функций
  • ветки разработчиков
  • нестабильные ветви ствола / выпуска
  • ответвления платформы

Это сильно зависит от вашего проекта и философии разработки.

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

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

person Peter Parker    schedule 21.01.2009
comment
›При этом должно быть ясно, что в макетах с несколькими репозиториями труднее поддерживать стабильную систему тегов. Не зная точно, что вы имеете в виду, мне интересно, можно ли это исправить, используя svn: externals, чтобы собрать макет с несколькими репозиториями перед тегированием. - person RjOllos; 11.09.2009
comment
вы можете сделать это, используя внешние элементы, однако все будет неприятно, если ваши подпроекты сами используют внешние элементы. Невозможно найти все внешние элементы во всех проектах, а поддержание внешних элементов более чем на одном уровне - задача PiA. - person Peter Parker; 12.09.2009

Когда несколько лет назад я перешел на свой первый настоящий SCM (из безопасного источника), я обнаружил следующее полезным - тогда, я думаю, по воле случая был белый документ:

http://www.perforce.com/perforce/bestpractices.html

person Tim    schedule 22.01.2009

Cederqvist обычно рассматривается как руководство по CVS.

person Kevin    schedule 21.01.2009
comment
Для того, что делать, не обязательно, как это делать. - person David Thornley; 21.01.2009

Я бы рекомендовал использовать GIT, поскольку процесс тегирования / ветвления чрезвычайно прост в использовании. Преимущество использования SVN (особенно в Windows) - это количество инструментов с графическим интерфейсом и интеграция с оболочкой Windows.

Я также поддерживаю рекомендацию книг Pragmatic Programmer по SVN.

person mwahab    schedule 21.01.2009

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

С чего начать работу можно найти здесь.

person Rob    schedule 02.03.2011