2012-06-22 3 views
17

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

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

Пусть мой URL Assembla SVN является: https://subversion.assembla.com/svn/my_assembla_svn_directory/

ответ

40

Вы всегда можете использовать параметр -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 на правой директории
  • Полную историю ветвей и тегов вы можете видеть, кто внес изменения, когда, почему и т. д.
  • Отображается полная история тега или ветви. Если кто-то меняет тег или ветку, вы видите, кто сделал это очень четко.
  • Он обескураживает разветвление типа хетер-скеттера, которое вы видите во многих других системах управления версиями, когда разработчики выбирают различные ветви и туловище, что нужно разветвить или пометить. Это делает отслеживание истории очень трудной задачей. Схема Subversion побуждает вас думать о ветвях и тегах как о влиянии на все файлы в проекте.
6

Прямо из SVN documentation:

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

$ 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.

(курсив мой)

 Смежные вопросы

  • Нет связанных вопросов^_^