如何将多个项目导入单个 Git 存储库

在单个存储库中管理多个项目的方法之一可以通过 Git Subtree 合并来完成。

通常,子树合并策略用于在存储库中包含存储库。

子树合并策略

Git Subtree 允许将一个存储库作为子目录嵌套在另一个存储库中。

它是跟踪软件依赖关系历史的方法之一。
但是子树不应该与子模块混淆。
子树只是一个可以与项目一起提交、分支和合并的子目录。

在与 Git 执行合并时使用子树合并策略。

将分支合并到 git 存储库的子目录时很有用。

子树合并策略将子项目的历史与项目的历史结合起来,而子项目的历史可以保持干净,除了应该到上游的提交。

将项目合并到单个存储库的步骤

让我们一步一步地将项目合并到一个存储库中:

初始化目录

首先,打开终端并创建一个目录并导航到它:

mkdir test
cd test

设置新的存储库

然后,使用 git init 生成一个新的 git 存储库。

使用此命令,将创建一个 .git 子目录,其中包含元数据,例如对象的子目录和用于初始化新存储库的模板文件:

git init
Initialized empty git repository in /Users/octocat/tmp/test/.git/

创建并提交新文件

接下来,我们应该创建并提交一个新文件,如下所示:

touch .gitignore
git add .gitignore
git commit -m "initial commit"

添加一个新的存储库作为子树

现在,是时候添加一个新的存储库作为子树了。
使用 git remote 命令添加一个指向我们想要的单独项目的新远程 URL:

git remote add -f example git@github.com:exmaple/Example.git

该示例是我们在示例存储库中合并的子树。

合并存储库

现在,我们可以将 Example 项目 git 合并到本地 Git 项目中,这不会更改本地的任何文件。

对于 Git 2.9 或者更高版本,请运行以下命令:

git merge -s ours --no-commit --allow-unrelated-histories example/master
Automatic merge went well; stopped before committing as requested.

默认情况下, git merge 命令拒绝合并不共享共同祖先的历史。
--allow-unrelated-histories 选项用于在合并两个项目的历史时覆盖此安全性。

对于 Git 2.8 或者以下版本,请运行:

git merge -s ours --no-commit example/master
Automatic merge went well; stopped before committing as requested.

将历史复制到文件夹中

新建一个名为Example的文件夹,将Example项目的Git历史复制进去:

git read-tree --prefix=example/-u example/master

提交更改

提交更改以确保项目安全:

git commit -m "Subtree merged in example"
[master ge1cf26] Subtree merged in example

将子树与更新同步

最后一步是将子树与更新和更改同步,因为它不会与上游更改保持同步。
使用 -s 选项执行 git pull 命令:

git pull -s subtree example master
日期:2020-06-02 22:16:40 来源:oir作者:oir