Подтвердить что ты не робот

Как создать тег из старой версии в Subversion при использовании Assembla?

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

В настоящее время я нахожусь в редакции 588 и хочу создать тег для ревизии 577. Как мне сделать это из командной строки с помощью Subversion в Assembla?

Предположим, что мой URL-адрес Assembla SVN: https://subversion.assembla.com/svn/my_assembla_svn_directory/

4b9b3361

Ответ 1

Вы всегда можете использовать параметр -r для ссылки на конкретную ревизию. При этом вы также можете использовать пиннинг версии @rev, чтобы убедиться, что вы ссылаетесь на макет ревизии Subversion при конкретной ревизии. Следующее создаст тег из соединительной линии в редакции 577 и вызовет этот тег REV-1.2:

$ svn cp -r 577 https://subversion.assembla.com/svn/my_assembla_svn_directory/trunk
    https://subversion.assembla.com/svn/my_assembla_svn_directory/tags/REV-1.2

Если у вас нет каталогов trunk, branches и tags, вам нужно будет переместить вашу работу, чтобы создать некоторые из них:

$ # Move the current directory to the "trunk"
$ svn cp https://subversion.assembla.com/svn/my_assembla_svn_directory \
    https://subversion.assembla.com/svn/my_assembla_svn_directory/trunk

$ # Make a corresponding tags and branches directories too
$ svn mkdir https://subversion.assembla.com/svn/my_assembla_svn_directory/branches
$ svn mkdir https://subversion.assembla.com/svn/my_assembla_svn_directory/tags

$ # Now, we can delete the old location. Let your developers know this,
$ # so they're not surprised by this and will be able to do a "svn relocate"
$ svn delete https://subversion.assembla.com/svn/my_assembla_svn_directory/

$ # Whoops. I should have done the tagging when I had a chance. 
$ #Oh well, we'll use the `@rev` pinning:

$ svn -r557 cp https://subversion.assembla.com/svn/[email protected] \
      https://subversion.assembla.com/svn/my_assembla_svn_directory/tags/REL-1.2

Subversion не реализует тегирование и разветвление, кроме как в качестве копии. Это не редкость. Аналогичным образом Perforce реализует ветвление. Фактически, как только вы привыкнете к этому, он работает очень хорошо:

  • Легко видеть действительные ветки и теги (просто выполните svn ls в правом каталоге
  • Полная история тегов и веток легко увидеть. Вы можете видеть, кто внес изменения, когда, почему и т.д.
  • Отображается полная история тега или ветки. Если кто-то меняет тег или ветку, вы видите, кто сделал это очень четко.
  • Это препятствует разветвлению типа helter-scelter, которое вы видите во многих других системах управления версиями, когда разработчики выбирают различные ветки и туловище, что нужно разветкить или пометить. Это делает отслеживание истории очень трудной задачей. Схема Subversion побуждает вас думать о ветвях и тегах как о влиянии на все файлы в проекте.

Ответ 2

Прямо из документации SVN:

Если вы хотите создать моментальный снимок /calc/trunk точно так, как он выглядит ревизия HEAD, сделайте ее копию:

$ svn copy http://svn.example.com/repos/calc/trunk \
           http://svn.example.com/repos/calc/tags/release-1.0 \
           -m "Tagging the 1.0 release of the 'calc' project."

Committed revision 902.

В этом примере предполагается, что каталог /calc/tags уже существует. (Если это не так, вы можете создать его с помощью svn mkdir.) После копии завершается, новый каталог release-1.0 навсегда представляет собой снимок того, как каталог /trunk смотрел в редакторе HEAD в то время, когда вы сделали копия. Конечно, вы можете быть более точными какую ревизию вы копируете, в случае, если кто-то другой может совершить изменения в проекте, когда вы не искали. Итак, если вы знаете, что ревизия 901 of/calc/trunk - это именно тот снимок, который вы хотите, вы можете укажите его, передав -r 901 команде svn copy.

(акцент мой)