我正在尝试将svn存储库移动到git存储库。我不想再使用svn所以我使用no-metadata选项。我很好奇为什么,在做了git svn fetch之后,我的分支只创建了远程引用。我正在使用:
创建回购git svn init -s --username=$SVNUSER --no-metadata http://URLTOSVN/$REPO
git config svn.authorsfile ../$USERFILE
git svn fetch
运行fetch之后,如果我查看我的分支:
prompt$ git branch -a
* master
remotes/BRANCH_1
remotes/BRANCH_2
remotes/trunk
我需要BRANCH_1和BRANCH_2分支,但似乎并没有创建它们。现在,当我使用--bare选项克隆它时,我可以在我的中央仓库中托管它,它忽略了那些远程引用,并且我得到的git repo根据我的意思不知道那些分支。我需要在我的回购中使用那些分支。我错过了什么?
答案 0 :(得分:0)
这意味着远程分支可用,但您目前没有将它们作为本地分支。您应该能够使用git fetch检索它们:
git fetch origin [remote-branch]:[new-local-branch]
即
git fetch origin BRANCH_1:BRANCH_1
这是我之前用于将svn repos转移到git的bash脚本。这将为您在当前目录中运行的机器上提供一个简单的git repo:
#!/bin/bash
REPO=$1
REPO_tmp=$REPO"_tmp"
USERFILE="/tmp/users.txt"
echo $REPO " > " $REPO_tmp
mkdir $REPO_tmp
cd $REPO_tmp
echo `pwd`
svn log http://URLTOSVN/$REPO|grep \| | awk 'BEGIN { FS = "|" }; {print $2}' | awk '{print $1 " = " $1 " <" $1 "@domain.com>"}' | sort | uniq > $USERFILE
git svn init http://URLTOSVN/$REPO --no-metadata
git config svn.authorsfile $USERFILE
git svn fetch
cd ..
git clone --bare $REPO_tmp $REPO.git
这也将保留您的svn日志历史记录。你可能需要摆弄连接参数,因为我实际上使用的是svn + ssh,而不是http。看一下我导入的repo然后克隆确实有分支我看到这样的例子:
git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/signup
在您的裸仓库中,分支机构应该有自己的名字。即:
git branch -a
* master
BRANCH1
BRANCH2
但是我发现我能够创建一个名为remotes / branch1的分支,所以可能你实际上有一些奇怪命名的本地分支。您可以尝试使用:
git checkout remotes/BRANCH_2