1
0
mirror of synced 2026-01-03 15:05:54 -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

121 lines
6.1 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Сведения о слияниях поддеревьев Git
redirect_from:
- /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
intro: 'Если вам нужно управлять несколькими проектами в одном репозитории, можно использовать *слияние поддеревьев* для обработки всех ссылок.'
versions:
fpt: '*'
ghes: '*'
ghae: '*'
ghec: '*'
ms.openlocfilehash: eb50228a4e256b1511ff65d21ce855a2d765ad86
ms.sourcegitcommit: 5f40f9341dd1e953f4be8d1642f219e628e00cc8
ms.translationtype: MT
ms.contentlocale: ru-RU
ms.lasthandoff: 10/04/2022
ms.locfileid: '148008840'
---
## Сведения о слияниях поддеревьев
Как правило, слияние поддеревьев используется для хранения репозитория в репозитории. "Подрепозиторий" хранится в папке основного репозитория.
Лучший способ объяснить слияние поддеревьев — показать это на примере. Будет выполнено:
- Создание пустого репозитория с именем `test`, который представляет проект
- Слияние в него другого репозитория в виде поддерева с именем `Spoon-Knife`.
- Проект `test` будет использовать этот подпроект, как если бы он был частью того же репозитория.
- Получение обновлений из `Spoon-Knife` в проект `test`.
## Настройка пустого репозитория для слияния поддеревьев
{% data reusables.command_line.open_the_multi_os_terminal %}
2. Создайте новый каталог и перейдите в него.
```shell
$ mkdir test
$ cd test
```
3. Инициализируйте новый репозиторий Git.
```shell
$ git init
> Initialized empty Git repository in /Users/octocat/tmp/test/.git/
```
4. Создайте и зафиксируйте новый файл.
```shell
$ 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-адрес, указывающий на отдельный интересующий нас проект.
```shell
$ 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
```
2. Выполните для проекта `Spoon-Knife` слияние в локальный проект Git. Это не изменяет файлы локально, но подготавливает Git к следующему шагу.
Если вы используете Git 2.9 или более поздней версии:
```shell
$ git merge -s ours --no-commit --allow-unrelated-histories spoon-knife/main
> Automatic merge went well; stopped before committing as requested
```
Если вы используете Git 2.8 или более ранней версии:
```shell
$ git merge -s ours --no-commit spoon-knife/main
> Automatic merge went well; stopped before committing as requested
```
3. Создайте каталог с именем **spoon-knife** и скопируйте в него журнал Git проекта `Spoon-Knife`.
```shell
$ git read-tree --prefix=spoon-knife/ -u spoon-knife/main
```
4. Зафиксируйте изменения, чтобы обеспечить их безопасность.
```shell
$ git commit -m "Subtree merged in spoon-knife"
> [main fe0ca25] Subtree merged in spoon-knife
```
Хотя мы добавили только один подпроект, в репозиторий Git можно включить любое количество подпроектов.
{% tip %}
**Совет.** Если вы создадите новый клон репозитория в будущем, добавленные удаленные элементы не будут созданы. Вам придется снова добавить их с помощью [ команды `git remote add`](/github/getting-started-with-github/managing-remote-repositories).
{% endtip %}
## Синхронизация с обновлениями и изменениями
При добавлении подпроекта он не будет автоматически синхронизироваться с вышестоящими изменениями. Необходимо обновить подпроект с помощью следующей команды:
```shell
$ git pull -s subtree REMOTE-NAME BRANCH-NAME
```
В примере выше это будет выглядеть примерно так:
```shell
$ git pull -s subtree spoon-knife main
```
## Дополнительные материалы
- [Глава "Расширенное слияние" из книги _Pro Git_](https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging)
- [Практическое руководство по использованию стратегии слияния поддеревьев](https://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.html)