我SVN结构是这样的:如何git克隆所有分支位于根的SVN仓库?
/
|-- Branch1
|-- Branch2
|-- Branch3
...
我如何克隆到一个Git仓库保存的分支(即不平坦的历史)呢?
红利问题:如何克隆SVN分支的一个子集到一个新的git仓库?
我SVN结构是这样的:如何git克隆所有分支位于根的SVN仓库?
/
|-- Branch1
|-- Branch2
|-- Branch3
...
我如何克隆到一个Git仓库保存的分支(即不平坦的历史)呢?
红利问题:如何克隆SVN分支的一个子集到一个新的git仓库?
我相信在SVN分支只是文件夹,它只是一个约定。 Git实际上与分支机构合作。有了这个方法变得更容易。
由于您需要从SVN存储库获取数据,您需要为其创建远程数据库。从结构看,你需要在你的git仓库中创建分支1到3。
创建Git存储库。
git init
git config --local --add user.name <Username>
git config --local --add user.email <email>
echo "MASTER" > master
git add master
git commit -m "Dummy commit"
创建您的SVN分支的远程。
git config --add svn-remote.<BranchName>.url <SVN URL>
git config --add svn-remote.<BranchName>.fetch :refs/remotes/<RemoteName>
为分支1:
git config --add svn-remote.branch1.url https://svnhost/svn/MyRepo/Branch1
git config --add svn-remote.branch1.fetch :refs/remotes/branch1_remote
取BRANCH1的SVN数据:
git svn fetch branch1
重复此对其他两个分支店2和店3。
如果你只是想克隆你可以在这里停下来,除非你想使用Git仓库,否则不需要继续下去。 Google上的git子树知道为什么这可能是你的情况下正确的解决方案。
创建子树:
Find last commit id:
git checkout remotes/branch1_remote
git svn log -n 1 --show-commit --oneline
Output: 734713bc047d87bf7eac9674765ae793478c50d3 (This is yout LastCommitId value)
Create subtree in mainline master branch:
git checkout master
git subtree add --prefix=Branch1 <LastCommitId>
为你加分题:试试这个
git svn clone https://svnhost/svn/MyRepo/Branch2
这一个是简单的,另一种是按照上面的步骤,而不是在创造三个遥控器相同的存储库每次创建新的存储库,然后添加分支机构的远程设备。根据您的要求,您可以通过不同方式进行Google搜索。
在任何分支创建之前克隆只有主干的前几个修订。我假设您的分支机构并未在修订版本5之前创建。我还假设您的中继文件夹名为trunk
。相应地调整。希望你已经创建了一个作者文件。这将设置本地存储库。
$ git svn clone https://svn.example.com/myrepo --authors-file=authors.txt -T trunk -r 1:5 myrepo
接下来,在myrepo/.git/config
类似添加branches
行这样的:
[svn-remote "svn"]
url = https://svn.example.com/myrepo
fetch = trunk:refs/remotes/origin/trunk
branches = branches/Branch1:refs/remotes/origin/*
branches = branches/Branch2:refs/remotes/origin/*
branches = branches/Branch3:refs/remotes/origin/*
如果你的分支遵循可与就像在你的例子的图案相匹配的命名惯例,你可以这样做:
[svn-remote "svn"]
url = https://svn.example.com/myrepo
fetch = trunk:refs/remotes/origin/trunk
branches = branches/Branch*:refs/remotes/origin/*
有人建议在进行这些编辑后删除myrepo/.git/svn/.metadata
。我不知道这是否有必要。
现在您只需获取其余修订版。 Git svn将制定分支机构并做正确的事情。任何不符合branches
行之一的分支都将被忽略。
$ cd myrepo
$ git svn fetch
一旦完成,您可以检查分支是否使用此命令创建。
$ git branch -r
origin/Branch1
origin/Branch2
origin/Branch3
origin/trunk
这是关于从SVN到Git的一次性转换,然后只使用了Git,还是您想从Git回退到SVN? – Vampire
这是一次性转换,但我希望能够转发更新的SVN提交到我的git回购。 – user1709708