Skip to main content

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

Если вам нужно управлять несколькими проектами в одном репозитории, можно использовать слияние поддеревьев для обработки всех ссылок.

Platform navigation

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

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

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

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

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

  1. Откройте ТерминалТерминалGIT Bash.

  2. Создайте новый каталог и перейдите в него.

    mkdir test
    cd test
    
  3. Инициализируйте новый репозиторий Git.

    $ git init
    > Initialized empty Git repository in /Users/octocat/tmp/test/.git/
    
  4. Создайте и зафиксируйте новый файл.

    $ 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
    
  2. Выполните для проекта 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
    
  3. Создайте каталог с именем spoon-knife и скопируйте в него журнал Git проекта Spoon-Knife.

    $ git read-tree --prefix=spoon-knife/ -u spoon-knife/main
    > fatal: refusing to merge unrelated histories
    
  4. Зафиксируйте изменения, чтобы обеспечить их безопасность.

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

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

Совет

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

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

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

git pull -s subtree REMOTE-NAME BRANCH-NAME

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

git pull -s subtree spoon-knife main

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

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy