用于subversion复制的简明命令行(分支)

时间:2011-05-18 10:17:11

标签: svn command-line copy branch command-line-arguments

到目前为止我看到的所有svn分支的例子都是这样的 svn cp -m 'Making test branch' svn://svnrepo/hellosite svn://svnrepo/hellosite2

因此,为了分支,我需要每次都指定远程存储库的完整URL。但是:

  • 工作副本与一个远程存储库相关联。即使是svn开关也被认为是先进的“手术”操作。
  • 在工作副本的同一个存储库中远程URL的分支总是如此(至少我从来不需要在与当前存储库完全无关的存储库中进行分支)。
  • 不支持在存储库之间进行复制(对吗?)。
  • 有关远程存储库的信息:请参阅svn info。

那么为什么我每次都应该输入完整的URL?!!或者我会错过什么? 是否有一些允许引用当前远程存储库的快捷方式?就像是 svn cp -m 'Making test branch' //hellosite //hellosite2

4 个答案:

答案 0 :(得分:44)

使用SVN 1.6或更高版本,如果您当时在工作副本中,则可以使用caret notation作为存储库根目录的快捷方式,例如

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

请注意,至少在Windows上,您需要用双引号括住^/trunk才能通过shell。

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

答案 1 :(得分:3)

您只需在shell中添加别名即可。例如,见this SO post

答案 2 :(得分:2)

我已经创建了一个小的bash别名文件,以便在shell上方便地进行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"

在工作目录中。

答案 3 :(得分:-5)

这是您需要习惯的许多奇怪的SVN主义之一。

您认为需要在两个参数中指定完整URL是绝对正确的。