多个gitlab & svn项目迁移到一个gitlab项目

Several gitlab & svn project migration into one gitlab project

任务:将 2 个 svn 项目和 1 个 git 项目迁移到 1 个新的 git 项目中。 (为简单起见,我们将项目称为“svn/first”、“svn/second”和“git/third”。)

条件:文件夹结构和编程语言不一致

Projects language location of Target project note
svn/first C .trunk/ First project
svn/second C++ .trunk/{Target project}/ Integrate with C++ base Data managing System
git/third C++ .Project package/{Target project}/ Integrate with packaging system including database

怎样才能漂亮的迁移?

具体来说,如何使用$ git svn fetch之类的东西在迁移'svn/first'的项目上迁移'svn/second'。如果可以的话,我想最后会更容易。

特此告知,目前工作进展如下。

  1. 复制父目录中的 'svn/first' 历史记录。

     $ git svn clone
    
  2. 将每个文件目录更改为'.Project package/{Target project}/.'

     $ git mv
    
  3. 手动将 'svn/first' 的最后一个版本与 'svn/second' 的第一个版本合并。

  1. 但是,我在这里与我的无知作斗争。我怎样才能将 'svn/second' 历史不断地添加(添加)到 'svn/first' 历史中。

据我所知,git 可以跟踪重命名工作,但 svn 不能。但如果没有,你可以告诉我如何重命名文件并在 'svn/first'.

上修补 'svn/second' 历史记录

(说实话,实在不行我宁愿安心。)

我会将此迁移分为 2 个步骤:

  1. 我会将所有内容转换成单独的 git 存储库,有自己的项目等,例如
  • git/first
  • git/second
  • git/third
  1. 我会检查存储库,这将是我的主要项目,我将与其他项目一起扩展并将其他项目集成到其中。这很容易做到,因为 git 是去中心化的,你可以有多个遥控器。

    要做到这一点,首先检查第一个存储库

     git clone <first url>
    

    接下来您可以添加其他遥控器

     git remote add second <second url>
     git remote add third <third url>
    

    现在可以说,我想集成 develop 分支,而不是将所有 3 个开发分支检查到不同的本地分支

     git checkout -b develop --track origin/develop
     git checkout -b develop_second --track second/develop
     git checkout -b develop_third --track third/develop
    

    之后我可以转到每个开发分支,应用我的更改,例如移动等。在本地提交并将其合并到我的开发分支中。

    最后但同样重要的是,您需要将这些分支合并在一起。你会得到一个错误,说历史不一样,但是 --allow-unrelated-histories 你可以超越这个。

      git switch develop
      git merge develop_second --allow-unrelated-histories
      git merge develop_third --allow-unrelated-histories
    

    通过这种方式,您还可以迁移决定分支中所有三个存储库的 Git 历史记录。

我希望这能以某种方式帮助您,简化您的迁移,并解决您的问题。至少那是我会如何解决它或者已经解决了多次。