SVN: создать папку для старых ревизий - PullRequest
3 голосов
/ 23 ноября 2010

Я довольно новичок в системах контроля версий, так что извините.

Мой проект состоит из двух небольших приложений, оба в своих собственных SVN-репозиториях.Кроме того, у меня есть один общий репозиторий (svn: externals) между этими приложениями.

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

.UI
    . "old versions"
        . 1.0
        . 2.0
        . 2.5
    . trunk (current development version 3.0)

Итак, мои вопросы:

  1. Какое правильное название для такого типа структуры (в SVN)?
  2. Как я могу его создать?
  3. Можно ли заморозить эти старые ревизии (предотвратить изменения в этой папке)?
  4. Есть ли лучшие способы добиться этого?

Ответы [ 3 ]

3 голосов
/ 23 ноября 2010
  1. «теги» - стандартное и правильное имя для этой папки.
  2. "svn copy" - ваш друг за создание. Многие продукты непрерывной интеграции будут иметь возможность автоматически помечать сборки.
  3. Да, вы можете заморозить их с помощью "хука перед фиксацией" (см. Ниже)
  4. Это стандартный способ ведения дел. Если вы отклонитесь слишком далеко, вы запутаете других пользователей.
<Ч />

Пример хука pre-comit (для окон), который мы используем здесь:

@echo off
SET SVNLOOK=C:\Program Files\CollabNet Subversion Server\svnlook.exe
SET GREP=D:\SVN\REPO\hooks\grep.exe

REM Prevent changes to tags.
("%svnlook%" changed -t %2 %1 | "%grep%" "^U.*/tags/") && (echo Cannot commit an update to a tag.>&2 && exit 1)

REM Prevent commits without comments.
("%svnlook%" log -t %2 %1 | "%grep%" "[a-zA-Z0-9]") || (echo You must specify a comment for all actions.>&2 && exit 1)

exit 0
<ч />

Чтобы создать тег вручную, используйте команду, подобную следующей:

svn copy "http://your/repo/UI/trunk"  "http://your/repo/UI/tags/v3.0" -m "Tagging v3.0"
1 голос
/ 23 ноября 2010

Вы должны пройти первые несколько глав онлайн-справки Subversion по адресу http://svnbook.com.. Это даст вам быстрый и хороший старт как для контроля версий, так и для Subversion.

Что выЭто довольно близко к тому, как работает Subversion.У вас еще есть эти каталоги?

В стандартной настройке Subversion вы настраиваете "теги", "ветки" и "магистральный" каталог.Некоторые люди устанавливают их в корне своего репозитория, другие устанавливают их в корне каждого проекта.

Например:

svn://svn/trunk/proj1
svn://svn/trunk/proj2
svn://svn/branches/proj1/1.2
svn://svn/branches/proj2/3.4

или

svn://svn/proj1/trunk
svn://svn/proj2/trunk
svn://svn/proj1/branches/1.2
svn://svn/proj2/branches/3.4

Большинство сайтов, которые я видел, делают это последним способом, но могут быть преимущества сделать это первым способом (в основном из-за использования svn:externals и того факта, что когда вы делаете заказ, ваш заказ не называется trunkпо умолчанию).

Все, что вам нужно сделать, это вызвать вашу директорию "старых версий" tags и все готово:

svn://svn/UI/tags/1.0
svn://svn/UI/tags/2.0
svn://svn/UI/tags/2.5
svn://svn/UI/trunk

Если вы забыли сделать тегне паникуйте!Одна из замечательных особенностей Subversion - номер ревизии хранилища.Это похоже на создание тега каждый раз, когда вы делаете коммит.Если вы можете найти номер ревизии, когда делали релиз (как правило, просматривая svn log), вы можете скопировать эту ревизию для создания вашего тега:

$ svn cp -r1234 svn://svn/UI/trunk  svn://svn/UI/tags/2.0

Как видите, вы используетеsvn cp команда для создания тегов и веток.Кстати, очень легко изменить тег, не осознавая этого.На большинстве сайтов они имеют ловушку предварительной фиксации, которая может либо запретить большинству пользователей совершать коммиты в каталоге тегов (это означает, что вы должны создавать теги), либо они позволяют пользователям создавать теги (через svn cp), но неразрешить пользователям изменять тег после его создания.У меня есть Perl-версия ловушки перед фиксацией на http://dl.dropbox.com/u/433257/new_svn_hooks.zip, если вы хотите взглянуть на нее.

1 голос
/ 23 ноября 2010
  1. ветви, теги и ствол
  2. создайте папки в вашем оформлении заказа и затем зафиксируйте их, затем используйте "branch / tag" (tortoiseSVN) или "svn copy" для строки cmd svn, чтобы создатьтег вашего ствола
  3. вы помечаете свой ствол в определенной точке, например, v1, v2, v3 - это ведет учет вашего хранилища в текущий момент времени, и вы всегда можете вернуться к ним
  4. Это способ достижения этого

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

Когда вы будете готовы к выпуску, вы создаете тег всего ствола.Тогда отпустите оттуда.Если в будущем вы захотите вернуться к определенной версии, у вас будет эта историческая ссылка в ваших тегах.Тег просто указывает на ваш репозиторий в определенный момент времени, например, 25123 об., Когда ваш ствол находится, например, на 35335 об.

...