多个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'。如果可以的话,我想最后会更容易。
特此告知,目前工作进展如下。
复制父目录中的 'svn/first' 历史记录。
$ git svn clone
将每个文件目录更改为'.Project package/{Target project}/.'
$ git mv
手动将 'svn/first' 的最后一个版本与 'svn/second' 的第一个版本合并。
源文件内容几乎相同,所以我改变了文件的扩展名和源文件的一点点差异。
$ git mv
- 但是,我在这里与我的无知作斗争。我怎样才能将 'svn/second' 历史不断地添加(添加)到 'svn/first' 历史中。
据我所知,git 可以跟踪重命名工作,但 svn 不能。但如果没有,你可以告诉我如何重命名文件并在 'svn/first'.
上修补 'svn/second' 历史记录
(说实话,实在不行我宁愿安心。)
我会将此迁移分为 2 个步骤:
- 我会将所有内容转换成单独的 git 存储库,有自己的项目等,例如
- git/first
- git/second
- git/third
我会检查存储库,这将是我的主要项目,我将与其他项目一起扩展并将其他项目集成到其中。这很容易做到,因为 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 历史记录。
我希望这能以某种方式帮助您,简化您的迁移,并解决您的问题。至少那是我会如何解决它或者已经解决了多次。
任务:将 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'。如果可以的话,我想最后会更容易。
特此告知,目前工作进展如下。
复制父目录中的 'svn/first' 历史记录。
$ git svn clone
将每个文件目录更改为'.Project package/{Target project}/.'
$ git mv
手动将 'svn/first' 的最后一个版本与 'svn/second' 的第一个版本合并。
源文件内容几乎相同,所以我改变了文件的扩展名和源文件的一点点差异。
$ git mv
- 但是,我在这里与我的无知作斗争。我怎样才能将 'svn/second' 历史不断地添加(添加)到 'svn/first' 历史中。
据我所知,git 可以跟踪重命名工作,但 svn 不能。但如果没有,你可以告诉我如何重命名文件并在 'svn/first'.
上修补 'svn/second' 历史记录(说实话,实在不行我宁愿安心。)
我会将此迁移分为 2 个步骤:
- 我会将所有内容转换成单独的 git 存储库,有自己的项目等,例如
- git/first
- git/second
- git/third
我会检查存储库,这将是我的主要项目,我将与其他项目一起扩展并将其他项目集成到其中。这很容易做到,因为 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 历史记录。
我希望这能以某种方式帮助您,简化您的迁移,并解决您的问题。至少那是我会如何解决它或者已经解决了多次。