Svn到git:如何处理我们的非标准、可能错误分支的Svn

Svn到git:如何处理我们的非标准、可能错误分支的Svn,svn,git,branch,Svn,Git,Branch,我们当前的svn结构如下所示: trunk -- project -- projectDao -- projectResources branches -- project-1.0 -- projectDao-1.0 -- projectResources-1.0 -- project-2.0 -- projectDao-2.0 -- projectResources-2.0 tags -- project-1.0.0 -- ... 更糟糕的是,project-1.0是从project-DAO

我们当前的svn结构如下所示:

trunk
-- project
-- projectDao
-- projectResources
branches
-- project-1.0
-- projectDao-1.0
-- projectResources-1.0
-- project-2.0
-- projectDao-2.0
-- projectResources-2.0
tags
-- project-1.0.0
-- ...
更糟糕的是,project-1.0是从project-DAO中的project-1.0分支出来的(每个都在单独的移动提交中)。理想的情况是这样的

这是提交日志:

trunk
-- project
-- projectDao
-- projectResources
branches
-- 1.0
---- project
---- projectDao
---- projectResources
-- 2.0
---- project
---- projectDao
---- projectResources
tags
--1.0.0
----project
---- ...
这就是它的意义所在。然后我们应该从主干分支到1.0,而不是2个不同的提交

然而,我们现在想(永久地)切换到git,我不知道如何从这开始

我真的不知道该怎么做。当我用标准布局git克隆我的存储库时,我得到了这样的东西

* master
  remotes/project-1.0
  remotes/project-1.0@3
  remotes/project-2.0
  remotes/project-2.0@10
  remotes/projectDao-1.0
  remotes/projectDao-1.0@4
  remotes/projectDao-2.0
  remotes/projectDao-2.0@11
  remotes/projectResources-1.0
  remotes/projectResources-1.0@5
  remotes/projectResources-2.0
  remotes/projectResources-2.0@12
  remotes/tags/project-1.0.0
  remotes/tags/projectDao-1.0.0
  remotes/tags/projectResources-1.0.0
  remotes/trunk
这就是gitg生成的内容

我不知道如何使用rebase使其正确,例如:

* master
  remotes/1.0
  remotes/2.0
  remotes/tags/1.0.0
  remotes/trunk

您应该能够根据自己认为适合git的情况重新设置这些分支的基础。只要您能够获得从svn到git的完整历史记录,就可以从您认为合适的任何提交创建分支1.0和2.0,并从那里继续构建您想要的任何结构。

如果我理解正确,您希望将导入的分支更改为1.0分支中的目录。此外,在维护svn存储库时,不要提及这是永久迁移还是git svn签出

如果这只是一个git svn签出,并且目标是继续使用原始svn作为中央存储库,那么我将只进行签出,而不使用标准布局开关,并在svn的目录中工作。这有点脏,但是你在返回SVN时没有问题

如果要转换存储库,请向所有分支添加提交,将该分支的内容放入根目录中,以便随后将分支合并在一起。您不会因为GIT历史记录中的旧分支结构而失去SVN历史记录,但未来将是全新的


只有在您想要转换所有历史记录的情况下,您才需要创建目录并重新设置基础。

您能再解释一下吗,我不知道该怎么做。我在第一篇文章中添加了我目前拥有的分支结构。命名为“remotes/project-1.0”等看起来有点奇怪(它几乎像一个远程分支,看起来像“remotes/origin/master”),但我猜这就是从svn转换为git时发生的情况。请键入“git branch-a”并在您的问题中发布该命令的完整输出。似乎您已经多次将其导出和导入git,这是真的吗?例如,主树似乎是它自己的子树,“绿色”树也是如此。我们将永久迁移。然而,这对我来说是非常新的,所以我真的不明白如何做到这一点:向所有分支添加一个commit,将该分支的内容放入根目录中,然后将这些分支合并在一起。实际上并不需要转换所有历史。要获得1.0和2.0分支(对于3.0及以后的版本,您可以将主控程序分支到3.0分支):在这些分支上(例如,Project-2.0、ProjectDao-2.0和ProjectResources-2.0,或这三个分支的工作副本),您首先创建一个目录项目,第二个是ProjectDao,第三个是ProjectResources,它们分别对应于master,并将所有文档移动到这些文档中,然后提交,然后合并到新的2.0分支中。谢谢,这满足了我的需要