Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Git Svn克隆非标准Svn存储库_Svn_Git_Git Svn_Clone - Fatal编程技术网

使用Git Svn克隆非标准Svn存储库

使用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

我对Git比较陌生,但我发现在家里使用它非常容易,所以我想在工作中使用它,因为我们的项目存储在Svn存储库中。不幸的是,这些存储库有点不标准,我很难克隆它们。当然,它们都有trunk、branchs/和tags/,但是branchs/和tags/在进入真正的项目目录之前都有子目录:

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/*