Краткая командная строка для подрывной копии (ветка) - PullRequest
26 голосов
/ 18 мая 2011

Все примеры ветвления SVN, которые я видел до сих пор, выглядят так: svn cp -m 'Making test branch' svn://svnrepo/hellosite svn://svnrepo/hellosite2

Так что для ветвления мне нужно каждый раз указывать полный URL удаленного репозитория.Но:

  • Рабочая копия связана с одним удаленным репозиторием.Даже svn-переключатель считается продвинутой «хирургической» операцией.
  • Ветвление удаленных URL-адресов в том же хранилище, что и у рабочей копии, всегда имеет место (по крайней мере, мне никогда не приходилось переходить в хранилище, которое полностью не связано с текущимone).
  • Копирование между репозиториями не поддерживается (верно?).
  • Доступна информация об удаленном репозитории: см. svn info.

Так почему вмир я должен каждый раз вводить полные URL? !!Или я что-то пропустил?Есть какой-нибудь ярлык, который позволяет ссылаться на текущий удаленный репозиторий?Что-то вроде svn cp -m 'Making test branch' //hellosite //hellosite2

Ответы [ 4 ]

44 голосов
/ 18 мая 2011

Используя SVN 1.6 или более позднюю версию, если вы находитесь в рабочей копии на тот момент, вы можете использовать символ каретки в качестве ярлыка для корня хранилища, например,

svn cp -m 'Making test branch' ^/trunk ^/branches/hellosite

Обратите внимание, что по крайней мере в Windows вам нужно заключить ^/trunk в двойные кавычки, чтобы получить его через оболочку.

svn cp -m "Making test branch" "^/trunk" "^/branches/hellosite"
3 голосов
/ 18 мая 2011

Вы можете просто добавить псевдоним в вашу оболочку.См. Например этот пост .

2 голосов
/ 28 июня 2013

Я создал небольшой файл псевдонима bash для удобного svn-ветвления в оболочке.(Вы можете получить полный файл здесь: https://github.com/grexi/snippets/blob/master/svnaliases)

function getrepo {
    REPO=`LANG=C svn info | grep "Repository Root"`
    echo ${REPO:17}
}

function getrepobase {
   if [ "`LANG=C svn info | grep -c Relative`" -gt 0 ]; 
   then
      parent=".."
      grandparent=".."
      if [ -d ".svn" ]; then
          echo ""
      else
          while [ ! -d "$grandparent/.svn" ]; do
              parent=$grandparent
              grandparent="$parent/.."
          done
          echo $grandparent
     fi
   else
      parent=""
      grandparent="."
      while [ -d "$grandparent/.svn" ]; do
          parent=$grandparent
          grandparent="$parent/.."
      done
      echo $parent
   fi
}

function _svnbr {
    if [ $# != 2 ]; then
        echo "Usage: $0 branchname \"commit message\""
    else
        REPO=$(getrepo)
        if [ -z "$REPO" ]; then
            echo "You are not inside a svn working copy"
            return;
        fi
        svn copy $REPO/trunk $REPO/branches/$1 -m "$2"
        svn switch $REPO/branches/$1 $(getrepobase)
    fi
}
alias svnbr=_svnbr

Создание ветви теперь превращается в

svnbr "branchname" "commit message"

внутри вашего рабочего каталога.

0 голосов
/ 18 мая 2011

Это один из многих странных SVN-образов, к которым вам нужно привыкнуть.

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

...