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, научить их, как переключаться между ветвями, будет намного проще, чем учить, как переключаться между подмодулями и поддеревьями, не говоря уже о слиянии этого беспорядка.
И если когда-нибудь ваша компания решит, что есть необходимость в принудительном пересмотре кода, человек, ответственный за перевод всего этого на благосклонность, поблагодарит вас.
В 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 взгляните на символические (мягкие) или жесткие ссылки, но я никогда не использовал их.