Как разделить несколько проектов в один репозиторий с помощью git?

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

Как мне настроить мой репозиторий git?

Это предварительные мысли, поэтому я не удивлюсь, если это безумие / глупость. Это?

4 ответа

Решение

Вы всегда можете использоватьgit remote add <name> <url>"добавить больше репозиториев в качестве источника.

Возможно, вас заинтересует функциональность git-submodule. Цитата отсюда:

Поддержка субмодулей в Git позволяет хранилищу содержать в качестве подкаталога извлечение внешнего проекта. Подмодули сохраняют свою индивидуальность; поддержка субмодулей просто хранит местоположение хранилища субмодулей и идентификатор фиксации, поэтому другие разработчики, которые клонируют содержащий проект ("суперпроект"), могут легко клонировать все субмодули в одной и той же ревизии. Возможны частичные проверки суперпроекта: вы можете указать Git клонировать ни один, некоторые или все подмодули.

Есть одна возможность, которую я никогда не пробовал "по-настоящему", но это может сработать.

Допустим, у вас есть три проекта с креативным названием Proj1, Proj2 и (угадайте) Proj3. Давайте также скажем, что все или некоторые из них зависят от внешних библиотек, например, одна называется Lib1.dll, а другая - SuperLib.dll.

Во-первых, для структуры папок я бы сделал что-то вроде:

MyCode\
    build_all.bat
    Docs\
        [...]
    Libs\
        Lib1.dll
        SuperLib.dll
    Proj1\
        [...]
    Proj2\
        [...]
    Proj3\
        [...]

Затем вы должны создать один репозиторий для каждой из папок ProjX:

cd \MyCode\Proj1
git init
cd \MyCode\Proj2
git init
cd \MyCode\Proj3
git init

Тогда вы бы создали хранилище для всего этого:

cd \MyCode
git init

Содержимое этого хранилища, для git, будет Libs папка и ее содержимое, build_all.bat сценарий сборки и 3 подпроекта.

Итак, как только вы измените свой исходный код, скажем, Proj1\Main.cs, все это не увидит модификацию. Вы должны были бы git commit на Proj1, и тогда вы бы пошли на все это, а затем git commit это (теперь git сможет увидеть, что Proj1 был изменен).

Используя этот метод, история всего этого будет просто указываться при изменении ProjX, но не будет напрямую отслеживать отдельные файлы. Однако, как и ожидалось, хранилище в ProjX будет отслеживать каждый файл, как обычно.

Если вы попробуете "настоящий проект", дайте мне знать результаты!

Удачи!

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

В то же время я все еще открыт для предложений.

Другие вопросы по тегам