如何使用svn-git(标准布局)正确保留所有分支,然后使用--bare选项保存svn-clone

时间:2012-02-09 19:04:35

标签: git-svn

我正在尝试将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根据我的意思不知道那些分支。我需要在我的回购中使用那些分支。我错过了什么?

1 个答案:

答案 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
相关问题