6.1 KiB
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 |
|
Если вам нужно управлять несколькими проектами в одном репозитории, можно использовать *слияние поддеревьев* для обработки всех ссылок. |
|
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
- Инициализируйте новый репозиторий 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
- Выполните для проекта
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
- Создайте каталог с именем spoon-knife и скопируйте в него журнал Git проекта
Spoon-Knife.
$ 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 можно включить любое количество подпроектов.
{% tip %}
Совет. Если вы создадите новый клон репозитория в будущем, добавленные удаленные элементы не будут созданы. Вам придется снова добавить их с помощью команды git remote add.
{% endtip %}
Синхронизация с обновлениями и изменениями
При добавлении подпроекта он не будет автоматически синхронизироваться с вышестоящими изменениями. Необходимо обновить подпроект с помощью следующей команды:
$ git pull -s subtree REMOTE-NAME BRANCH-NAME
В примере выше это будет выглядеть примерно так:
$ git pull -s subtree spoon-knife main