到目前为止我看到的所有svn分支的例子都是这样的
svn cp -m 'Making test branch' svn://svnrepo/hellosite svn://svnrepo/hellosite2
因此,为了分支,我需要每次都指定远程存储库的完整URL。但是:
那么为什么我每次都应该输入完整的URL?!!或者我会错过什么?
是否有一些允许引用当前远程存储库的快捷方式?就像是
svn cp -m 'Making test branch' //hellosite //hellosite2
答案 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是绝对正确的。