关于子� �合并
通常,子� �合并用于在仓库中包含仓库。 “子仓库”存储在主仓库的文件夹中。
解释子� �合并的最佳方式是举例说明。 我们将:
- 创建一个名为
test
的空仓库,表示我们的项目 - 将另一个仓库
Spoon-Knife
作为子� �合并到其中。 - 如果该子项目属于同一仓库,
test
项目会使用它。 - 从
Spoon-Knife
提取更新到test
项目。
创建用于子� �合并的空仓库
- 打开 Terminal(终端)Terminal(终端)Git Bash。
- 创建一个新目录并找到它。
$ mkdir test $ cd test
- 初始化新的 Git 仓库。
$ git init > Initialized empty Git repository in /Users/octocat/tmp/test/.git/
- 创建并提交新文件。
$ touch .gitignore $ git add .gitignore $ git commit -m "initial commit" > [main (root-commit) 3146c2a] initial commit > 0 files changed, 0 insertions(+), 0 deletions(-) > create mode 100644 .gitignore
新增一个仓库为子� �
-
新增指向我们感兴趣的单独项目的远程 URL。
$ git remote add -f spoon-knife https://github.com/octocat/Spoon-Knife.git > Updating spoon-knife > warning: no common commits > remote: Counting objects: 1732, done. > remote: Compressing objects: 100% (750/750), done. > remote: Total 1732 (delta 1086), reused 1558 (delta 967) > Receiving objects: 100% (1732/1732), 528.19 KiB | 621 KiB/s, done. > Resolving deltas: 100% (1086/1086), done. > From https://github.com/octocat/Spoon-Knife > * [new branch] main -> Spoon-Knife/main
-
将
Spon-Knife
项目合并到当地 Git 项目。 这不会在本地更改任何文件,但会为下一步准备 Git。如果您使用的是 Git 2.9 或更高版本:
$ git merge -s ours --no-commit --allow-unrelated-histories spoon-knife/main > Automatic merge went well; stopped before committing as requested
如果您使用的是 Git 2.8 或更低版本:
$ git merge -s ours --no-commit spoon-knife/main > Automatic merge went well; stopped before committing as requested
-
创建新目录 spoon-knife 并将
Spoon-Knife
项目的 Git 历史记录复制到其中。$ git read-tree --prefix=spoon-knife/ -u spoon-knife/main
-
提交更改以确保其安全。
$ git commit -m "Subtree merged in spoon-knife" > [main fe0ca25] Subtree merged in spoon-knife
虽然我们只添� 了一个子项目,但是可在 Git 仓库中� 入任意数量的子项目。
提示:如果以后创建仓库的全新克隆,不会为您创建您添� 的远程 Url。 您需要再次使用 the git remote add
命令添� 它们。
同步更新和更改
添� 子项目时,它不会自动与上游更改保持同步。 您需要使用以下命令更新子项目:
$ git pull -s subtree remotename branchname
对于上述示例,将是:
$ git pull -s subtree spoon-knife main