如何将多个存储库迁移到单一存储库,同时保留提交历史记录?

问题描述 投票:0回答:2

我正在尝试将几个 Git 存储库迁移到一个单一存储库中。

我有两个项目存储库,我们称它们为

project1
project2
。在我的 monorepo 中,我想要一个
projects
目录,其中包含两个子目录
project1
project2
。每个子目录应包含相应项目中的文件,并保留 Git 历史记录。

使用标准 Git 命令是否可以做到这一点?

注意:我看过 Lerna -

lerna import
完全符合我的需要,但不幸的是它只适用于 JS 项目,而我的项目之一是 Ruby 项目。

git version-control monorepo
2个回答
6
投票

是的,您可以使用 git 命令来实现这一点。

将两个存储库迁移到单一存储库到子文件夹

project1
project2
中,您需要将文件移动到存储库的project1/project2文件夹中,提交更改,然后将它们组合在一起。详细步骤如下:

###1。分别将文件移动到project1和project2文件夹中 在第一个存储库(例如

repo1
)中,将文件移动到
project1
文件夹中,如下所示:

# In local repo1 
mkdir project1
mv * project1
git add .
git commit -m 'move files into project1 folder'
git push

在第二个仓库(如

repo2
)中,将文件移动到project2文件夹中,如下所示:

# In local repo2
mkdir project2
mv * project2
git add .
git commit -m 'move files into project2 folder'
git push

###2。将两个存储库迁移到单一存储库

在任何本地存储库(例如本地

repo1
)中,执行以下命令:

# In local repo1
git remote add repo2 <URL for repo2> -f
git pull repo2 master --allow-unrelated-histories

0
投票

还有一个更简单的步骤,

  1. 从 monorepo 上方克隆
  2. 在您的 monorepo 下,导入纱线 lerna
  3. git 推送

https://github.com/pingleware/bestbooks的项目是将多存储库转换为单一存储库的一个主要示例,

    git克隆
  1. https://github.com/pingleware/bestbooks
导入

https://github.com/pingleware/bestbooks-core

    git 克隆
  1. https://github.com/pingleware/bestbooks-core
  2. cd 最佳书籍
  3. 纱线勒纳导入../bestbooks-core
  4. git 推送
  5. rm-rfd ../bestbooks-core
© www.soinside.com 2019 - 2024. All rights reserved.