SVN: создайте папку для старых версий

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

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

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

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

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

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

person Routa    schedule 23.11.2010    source источник


Ответы (3)


Вам следует просмотреть несколько первых глав онлайн-справочника 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

or

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, если вы хотите взглянуть на него.

person David W.    schedule 23.11.2010
comment
Спасибо за ответ. Я использую VisualSVN, который автоматически создает эти конкретные папки. Жаль, я был слишком глуп, чтобы понять их значение / прочитать ответ из документов. :) - person Routa; 23.11.2010

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

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

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

person Martin    schedule 23.11.2010

person    schedule
comment
Хороший сценарий предварительной фиксации! Возможно, мне придется использовать это, всегда есть кто-то, кто не комментирует! - person Martin; 23.11.2010
comment
@Routa: Если это помогло вам, проголосуйте и/или примите ответ. :) - person John Gietzen; 23.11.2010
comment
@Martin: вам нужно будет получить копию grep.exe для Windows или изменить скрипт для использования find.exe. Но не стесняйтесь поймать его. - person John Gietzen; 23.11.2010