Поддержание Git репо внутри другого репозитория Git

У меня есть репозиторий git, который содержится в веб-приложении AngularJS.

у него есть подпапка, называемая сборкой, которая создается с помощью задачи gulp. Я развертываю в Azure, поэтому он напрямую связан с моим каталогом bitbucket.

Я хочу создать папку сборки как отдельный репозиторий git, из которого развертывается приложение Azure. Как достичь этого в git??

Ответ 1

У вас есть несколько вариантов, например:

  • подмодуль
  • поддерево

Submodules позволяют встроить внешние репозитории в выделенный подкаталог исходного дерева, всегда указывая на конкретную фиксацию.


git submodule

Разделите свой большой проект на подпроекты, как вы это делали до сих пор. Теперь добавьте каждый дополнительный проект в основной проект, используя:

git submodule add <url>

После того как проецируется добавлено к вашему репо, вы должны инициализировать его и обновлять.

git submodule init
git submodule update

В качестве Git 1.8.2 добавлена ​​новая опция --remote

git submodule update --remote --merge

будет fetch последними изменениями от восходящего потока в каждом подмодуле, merge them in и check out последней версией подмодуль.

Как документы описывают это:

--remote

Этот параметр действителен только для команды обновления. Вместо использования суперпроектов, записанных SHA-1 для обновления подмодуля, используйте состояние ветки удаленного отслеживания подмодулей.

Это эквивалентно запуску git pull в каждом подмодуле.


Однако как я могу нажать фиксацию в сценарии исправления ошибок в C, который влияет на код, разделяемый родительскими слоями?

Опять же: использование подмодуля поместит ваш код в ваш основной проект как часть его содержимого. Разница между наличием локально внутри папки или наличием ее как части подмодуля заключается в том, что в подмодуле контент управляется (переводится) в другой автономный репозиторий.


Это иллюстрация проекта подмодуля внутри другого проекта, в котором каждый проект является автономным проектом.

введите описание изображения здесь


git subtree

Git поддерево позволяет вставить любой репозиторий в качестве подкаталога другого

Очень похоже на submodule, но основное отличие заключается в том, где ваш код управляется. В подмодулях содержимое помещается внутри отдельного репо и управляется там, что позволяет вам клонировать его также ко многим другим репозиториям.

subtree управляет содержимым как часть корневого проекта, а не в отдельном проекте.

Вместо того, чтобы записывать, как настроить его и понять, как его использовать, вы можете просто прочитать эту отличную запись, которая объяснит все это.

https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/

Ответ 2

Вы можете сделать это с помощью подмодуля или поддерева git, я использую подмодуль для такого рода причин.

https://git-scm.com/docs/git-submodule

пример:

/mainrepository
/mainrepository/subrepository

cd /mainrepository/subrepository;
git init .
cd ../
git submodule add ./subrepository

then open seperate remote repository in bit bucket then 
cd into ./subrepository
git remote add origin https://bitbucket.com/path/to/subrepository.git

в основном это все об этом.

У меня нет подробной информации о поддеревьях, что я знаю, она более продвинута, чем подмодули. Но если ваши потребности в основном совпадают с подмодулями, их легко поддерживать.