Иметь несколько проектов Git в одном - PullRequest
0 голосов
/ 29 декабря 2018

Я новичок в git, и у меня нет идеи сделать это.

Я создаю шаблон, в котором есть пакет модулей, а модуль содержит модули.

Модули могутможет быть установлен отдельно и может иметь несколько версий одного и того же модуля (pro, simple ..).(Я думаю, что я могу сделать ответвление в папке моего модуля).

Пакет модулей может быть установлен без шаблона, но необходимо иметь модули внутри с последней версией, и эти модули пакета также могут иметь версию, дляПример первой версии включает в себя модуль 1,2,3 ...

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

В резюме мне нужно контролировать версии всех вместе и отдельно, но мне нужно, чтобы все они были в одном месте

Думаю, я мог бы сделать это

 -- Template (git folder)
     -- Module pack (git folder)
        -- Module 1 (git folder)
           -- Pro version (branch)
           -- Simple version (branch)
        -- Module 2 (git folder)
        -- ....

Это возможно, или я должен думать другими способами?Спасибо.

1 Ответ

0 голосов
/ 29 декабря 2018

У меня есть решение вашей проблемы - gil (git links) tool

Позволяет описывать и управлять сложными зависимостями git-репозиториев.

Кроме того, он обеспечивает решение проблемы зависимости git-рекурсивных субмодулей .

Рассмотрим следующие зависимости проекта: пример графика зависимостей репозитория git

Затем вы можете определить .gitlinks файл с описанием отношений с репозиториями:

# Projects
CppBenchmark CppBenchmark https://github.com/chronoxor/CppBenchmark.git master
CppCommon CppCommon https://github.com/chronoxor/CppCommon.git master
CppLogging CppLogging https://github.com/chronoxor/CppLogging.git master

# Modules
Catch2 modules/Catch2 https://github.com/catchorg/Catch2.git master
cpp-optparse modules/cpp-optparse https://github.com/weisslj/cpp-optparse.git master
fmt modules/fmt https://github.com/fmtlib/fmt.git master
HdrHistogram modules/HdrHistogram https://github.com/HdrHistogram/HdrHistogram_c.git master
zlib modules/zlib https://github.com/madler/zlib.git master

# Scripts
build scripts/build https://github.com/chronoxor/CppBuildScripts.git master
cmake scripts/cmake https://github.com/chronoxor/CppCMakeScripts.git master

Каждая строка описывает git-ссылку в следующем формате:

  1. Уникальное имярепозиторий
  2. Относительный путь к репозиторию (начинается с пути файла .gitlinks)
  3. Git-репозиторий, который будет использоваться в команде git clone
  4. Ветка репозитория для проверки

Пустая строка или строка, начинающаяся с #, не анализируется (рассматривается как комментарий).

Наконец, вам необходимо обновить корневой репозиторий примеров:

# Clone and link all git links dependencies from .gitlinks file
gil clone
gil link

# The same result with a single command
gil update

AsВ результате вы клонируете все необходимые проекты и правильно связываете их друг с другом.

Если вы хотите зафиксировать все изменения в каком-либо репозитории со всеми изменениями в дочернем связанном репозиторииТо есть вы можете сделать это с помощью одной команды:

gil commit -a -m "Some big update"

Команда Pull, push работает аналогичным образом:

gil pull
gil push

Инструмент Gil (git links) поддерживает следующие команды:

usage: gil command arguments
Supported commands:
    help - show this help
    context - command will show the current git link context of the current directory
    clone - clone all repositories that are missed in the current context
    link - link all repositories that are missed in the current context
    update - clone and link in a single operation
    pull - pull all repositories in the current directory
    push - push all repositories in the current directory
    commit - commit all repositories in the current directory

Подробнее о git проблема зависимости рекурсивных субмодулей .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...