1
0
mirror of synced 2026-01-02 12:04:38 -05:00
Files
docs/translations/ru-RU/content/get-started/using-git/about-git-subtree-merges.md
2022-11-16 21:42:42 +00:00

6.1 KiB
Raw Blame History

title, redirect_from, intro, versions, ms.openlocfilehash, ms.sourcegitcommit, ms.translationtype, ms.contentlocale, ms.lasthandoff, ms.locfileid
title redirect_from intro versions ms.openlocfilehash ms.sourcegitcommit ms.translationtype ms.contentlocale ms.lasthandoff ms.locfileid
Сведения о слияниях поддеревьев Git
/articles/working-with-subtree-merge
/subtree-merge
/articles/about-git-subtree-merges
/github/using-git/about-git-subtree-merges
/github/getting-started-with-github/about-git-subtree-merges
/github/getting-started-with-github/using-git/about-git-subtree-merges
Если вам нужно управлять несколькими проектами в одном репозитории, можно использовать *слияние поддеревьев* для обработки всех ссылок.
fpt ghes ghae ghec
* * * *
eb50228a4e256b1511ff65d21ce855a2d765ad86 5f40f9341d MT ru-RU 10/04/2022 148008840

Сведения о слияниях поддеревьев

Как правило, слияние поддеревьев используется для хранения репозитория в репозитории. "Подрепозиторий" хранится в папке основного репозитория.

Лучший способ объяснить слияние поддеревьев — показать это на примере. Будет выполнено:

  • Создание пустого репозитория с именем test, который представляет проект
  • Слияние в него другого репозитория в виде поддерева с именем Spoon-Knife.
  • Проект test будет использовать этот подпроект, как если бы он был частью того же репозитория.
  • Получение обновлений из Spoon-Knife в проект test.

Настройка пустого репозитория для слияния поддеревьев

{% data reusables.command_line.open_the_multi_os_terminal %} 2. Создайте новый каталог и перейдите в него.

$ mkdir test
$ cd test
  1. Инициализируйте новый репозиторий Git.
$ git init
> Initialized empty Git repository in /Users/octocat/tmp/test/.git/
  1. Создайте и зафиксируйте новый файл.
$ 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

Добавление нового репозитория как поддерева

  1. Добавьте новый удаленный 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
  1. Выполните для проекта Spoon-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
  1. Создайте каталог с именем spoon-knife и скопируйте в него журнал Git проекта Spoon-Knife.
$ git read-tree --prefix=spoon-knife/ -u spoon-knife/main
  1. Зафиксируйте изменения, чтобы обеспечить их безопасность.
$ git commit -m "Subtree merged in spoon-knife"
> [main fe0ca25] Subtree merged in spoon-knife

Хотя мы добавили только один подпроект, в репозиторий Git можно включить любое количество подпроектов.

{% tip %}

Совет. Если вы создадите новый клон репозитория в будущем, добавленные удаленные элементы не будут созданы. Вам придется снова добавить их с помощью команды git remote add.

{% endtip %}

Синхронизация с обновлениями и изменениями

При добавлении подпроекта он не будет автоматически синхронизироваться с вышестоящими изменениями. Необходимо обновить подпроект с помощью следующей команды:

$ git pull -s subtree REMOTE-NAME BRANCH-NAME

В примере выше это будет выглядеть примерно так:

$ git pull -s subtree spoon-knife main

Дополнительные материалы