我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们
文章版本: Enterprise Server 2.15

此版本的 GitHub Enterprise 将停止服务 此版本的 GitHub Enterprise 已停止服务 2019-10-16. No patch releases will be made, even for critical security issues. For better performance, improved security, and new features, upgrade to the latest version of GitHub Enterprise. For help with the upgrade, contact GitHub Enterprise support.

关于 Git 子树合并

如果需要管理单一仓库中的多个项目,可以使用子树合并来处理所有引用。

通常,子树合并用于在仓库中包含仓库。 “子仓库”存储在主仓库的文件夹中。

解释子树合并的最佳方式是举例说明。 我们将:

创建用于子树合并的空仓库

  1. 打开终端终端Git Bash终端

  2. 创建一个新目录并找到它。

$ mkdir test
$ cd test
  1. 初始化新的 Git 仓库。

    $ git init
    > Initialized empty Git repository in /Users/octocat/tmp/test/.git/
  2. 创建并提交新文件。

    $ touch .gitignore
    $ git add .gitignore
    $ git commit -m "initial commit"
    > [master (root-commit) 3146c2a] initial commit
    >  0 files changed, 0 insertions(+), 0 deletions(-)
    >  create mode 100644 .gitignore

Adding a new repository as a subtree

  1. 新增指向我们感兴趣的单独项目的远程 URL。

    $ git remote add -f spoon-knife git@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 git://github.com/octocat/Spoon-Knife
    >  * [new branch]      master     -> Spoon-Knife/master
  2. Spoon-Knife 项目合并到本地 Git 项目。 这不会在本地更改任何文件,但会为下一步准备 Git。

    如果使用的是 Git 2.9 或更高版本:

    $ git merge -s ours --no-commit --allow-unrelated-histories spoon-knife/master
    > Automatic merge went well; stopped before committing as requested

    如果使用的是 Git 2.8 或更低版本:

    $ git merge -s ours --no-commit spoon-knife/master
    > Automatic merge went well; stopped before committing as requested
  3. 创建新目录 spoon-knife 并将 Spoon-Knife 项目的 Git 历史记录复制到其中。

    $ git read-tree --prefix=spoon-knife/ -u spoon-knife/master
  4. 提交更改以确保其安全。

    $ git commit -m "Subtree merged in spoon-knife"
    > [master fe0ca25] Subtree merged in spoon-knife

虽然我们只添加了一个子项目,但可将任意数量的子项目合并到 Git 仓库中。

提示:如果以后创建仓库的全新克隆,不会为您创建您添加的远程 URL。 您必须使用 the git remote add command 重新添加它们。

Synchronizing with updates and changes

添加子项目时,它不会自动与上游更改保持同步。 您需要使用以下命令更新子项目:

$ git pull -s subtree remotename branchname

对于上述示例,将是:

$ git pull -s subtree spoon-knife master

延伸阅读

问问别人

找不到要找的内容?

联系我们