git - 如何在维护提交历史记录的同时将多个存储库迁移到单一存储库中?

标签 git version-control monorepo

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

我有两个项目存储库,我们称它们为 project1project2。在我的 monorepo 中,我想要一个包含两个子目录的 projects 目录,project1project2。每个子目录应包含相应项目的文件,并保留 Git 历史记录。

这甚至可以通过标准 Git 命令实现吗?

注意:我看过 Lerna - lerna import 完全满足我的需要,但不幸的是它只适用于 JS 项目,而我的一个项目是 Ruby 项目。

最佳答案

是的,可以使用git命令来实现。

将两个 repos 迁移到 monorepo 到子文件夹 project1project2 中,您需要将文件移动到 repo 的 project1/project2 文件夹中,提交更改,然后将它们组合在一起.详细步骤如下:

###1。将文件分别移动到 project1 和 project2 文件夹中 在第一个 repo(例如 repo1)中,将文件移动到 project1 文件夹中,如下所示:

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

在第二个repo(例如repo2)中,将文件移动到project2 文件夹中,如下所示:

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

###2。将两个 repos 迁移到 monorepo

在任何本地仓库中(例如在本地 repo1 中),执行以下命令:

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

关于git - 如何在维护提交历史记录的同时将多个存储库迁移到单一存储库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50033287/

相关文章:

angular - 有没有更好的方法来构建带有库的 Angular monorepo 应用程序?

git - 如何在 Git 中设置默认推送存储库?

git - 为什么 'git mergetool' (meld) 显示冲突标记?

git 快速导出格式和空格

git - VisualStudio : An error was raised by libgit2. 类别 = checkout

wordpress - Git Status - 仅列出有更改的直接子文件夹,而不是内部文件

linux - 'Git : gpg failed to sign the data' in visual studio code

version-control - 您如何在生产服务器上的 Web 项目上应用补丁?

javascript - 如何扩展父 babel 配置?

node.js - Nrwl Nx 构建 Node 项目只转译 main.ts