使用Git Svn克隆非标准Svn存储库
我对Git比较陌生,但我发现在家里使用它非常容易,所以我想在工作中使用它,因为我们的项目存储在Svn存储库中。不幸的是,这些存储库有点不标准,我很难克隆它们。当然,它们都有trunk、branchs/和tags/,但是branchs/和tags/在进入真正的项目目录之前都有子目录:使用Git Svn克隆非标准Svn存储库,svn,git,git-svn,clone,Svn,Git,Git Svn,Clone,我对Git比较陌生,但我发现在家里使用它非常容易,所以我想在工作中使用它,因为我们的项目存储在Svn存储库中。不幸的是,这些存储库有点不标准,我很难克隆它们。当然,它们都有trunk、branchs/和tags/,但是branchs/和tags/在进入真正的项目目录之前都有子目录: trunk/ branches/maintenance/release1 branches/maintenance/release2 ... branches/development/feature1 branche
trunk/
branches/maintenance/release1
branches/maintenance/release2
...
branches/development/feature1
branches/development/feature2
...
tags/build/build1
tags/build/build2
...
tags/release/release1
tags/release/release2
克隆后:
$ git svn clone -s --prefix=svn/ https://mydomain.com/svnproject
$ git branch -r
development
development@1340
maintenance
maintenance@1340
tags/build
tags/build@1340
tags/release
tags/release@1340
trunk
trunk@1340
我没有得到任何实际的项目分支或标记。我实际上需要能够在主干上工作,一个维护分支和一个开发分支。除了修改配置的几次黑客攻击之外,我还尝试过这种方法,但没有任何效果
有没有办法将我的非标准Svn项目的关键组件放到本地git存储库中,以便在它们之间轻松移动
非常感谢
更新:我应该补充一点,我还不能批量切换到Git。还有其他团队成员参与其中,并且有国际存在。过渡的后勤工作比我愿意承担的要多,直到我对Git更满意为止;正如我提到的,我还是个新手。我几乎没有触及它的功能的表面。您能尝试(似乎是最新的)将您的svn导入git存储库吗?(2009年初,他提到了这个来代替这个,正如他的作者所说:“这是一个快速破解我的代码的方法 “颠覆罪”) 它比git svn clone要好,因为如果svn中有此代码:
trunk
...
branches
1.x
2.x
tags
1.0.0
1.0.1
1.0.2
1.1.0
2.0.0
git svn
将通过提交历史来构建新的git回购。它将所有分支和标记作为远程svn分支导入,而您真正想要的是git本地分支和git标记对象
因此,导入此项目后,您将获得:
$ git branch
* master
$ git branch -a
* master
1.x
2.x
tags/1.0.0
tags/1.0.1
tags/1.0.2
tags/1.1.0
tags/2.0.0
trunk
$ git tag -l
[ empty ]
svn2git完成项目后,您将得到以下结果:
$ git branch
* master
1.x
2.x
$ git tag -l
1.0.0
1.0.1
1.0.2
1.1.0
2.0.0
当然,这个解决方案并不意味着单向旅行 您可以随时返回您的svn存储库,使用(同时) 想法仍然是:
- SVN作为一个中央存储库工作
- Git“别处”可以在多个Git私有分支之间快速试验
- 导入回仅将Git分支合并为官方SVN分支
- 李B是对的。doener在#git中提供的答案是将git升级到1.6.x(我一直在使用1.5.x)。1.6.x提供了深度克隆,因此可以将多个通配符与
--分支
选项一起使用:
$ git svn clone https://svn.myrepos.com/myproject web-self-serve \
--trunk=trunk --branches=branches/*/* --prefix=svn/
$ git branch -r
svn/development/sandbox1
svn/development/feature1
svn/development/sandbox2
svn/development/sandbox3
svn/development/model-associations
svn/maintenance/version1.0.0
svn/trunk
正是我需要的。感谢您的洞察力,所有。对于不使用普通通配符的回购布局:(从到) 报告说: 也可以获取子集 通过使用 内部名称的逗号分隔列表 支撑。例如:
我在另一篇帖子上看到了与我的问题类似的评论。不幸的是,我不认为这会起作用(尽管我肯定会仔细研究svn2git)。我需要与Svn回购直接互动。还有其他团队成员还没有准备好使用Git。+1-我在学习Git时遇到了类似的问题,直到我使用svn2git建立了一个新的回购协议,问题就消失了。一个更为最新的版本可在@VonC-如果克隆因网络不可用而中断,如何重新启动它?@conceptquest 7年后,我不太确定我是如何做到这一点的(我想我当时没有这个问题):最好问一个新问题,确切的版本是SVN,Git,使用了svn2git和OS。创建了新问题我已经按照您的步骤迁移了1个标记。我想在接下来的两个标签中重复同样的内容。我尝试添加第三个标记{1.0,2.0,3.0}并执行git svn fetch。但它并没有从回购中获得任何东西。我遗漏了什么吗?
[svn-remote "huge-project"]
url = http://server.org/svn
fetch = trunk/src:refs/remotes/trunk
branches = branches/{red,green}/src:refs/remotes/branches/*
tags = tags/{1.0,2.0}/src:refs/remotes/tags/*