Git: несколько репозиториев в одной папке с общими файлами и кодом

Я смотрю на перемещение большой кодовой базы в Git. Есть много групп, работающих над базой кода, и многократные сборки находятся в [ступенчатом] производстве. Некоторые люди будут работать над ReleaseBuild A и ReleaseBuild B одновременно, и им понадобится возможность переключаться между репозиториями сборки при использовании одной и той же папки. Многие из файлов и папок будут разными и во многом одинаковыми в каждом репозитории сборки выпуска. Каждый репозиторий должен следовать своей собственной модели ветвления, как показано здесь: http://nvie.com/posts/a-successful-git-branching-model/.

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

TLDR: Кто-нибудь знает хороший способ управления несколькими базовыми линиями, в которых выполняется параллельная работа с использованием одной и той же локальной папки для каждого?

2 ответа

Решение

Из этого комментария я могу догадаться, что вы позаботились о каком-то приложении для предприятия ™... тьфу. Просто бросьте в него кучу веток и назовите их соответственно, как ReleaseA, ReleaseB (или же ReleaseX_environment если вам нужно разделить среду) и так далее. Заставьте своих коллег придерживаться соглашения об именах при работе с функциями, например, если вы используете JIRA, пусть ветви будут названы ReleaseX_TICKET-000,

Если основной версии выпуска нет, вы можете удалить master филиал.

Дерево GIT для вашего проекта может выглядеть так

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

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

В Windows вы можете использовать соединения для переключения текущего хранилища. См. Junction в sysinternals (microsoft) https://technet.microsoft.com/pl-pl/en-en/sysinternals/bb896768.aspx.

Предположим, ваши репозитории находятся в c: \ repos \ a, c: \ repos \ b и c: \ repos \ c, а ваша сборка работает только с c: \ myrepo. Вместо того, чтобы переименовывать вокруг, вы можете создать соединение как

junction c:\myrepo c:\repos\b

Теперь соберите b из c: \ myrepo

junction /D c:\myrepo
junction c:\myrepo c:\repos\a

Теперь создайте из c: \ myrepo

Не удаляйте c: \ myrepo в проводнике, он удалит исходное содержимое.

Примечание: соединение требует возвышения (администратор runas).

В Linux взгляните на символические (мягкие) или жесткие ссылки, но я никогда не использовал их.

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