Как мне ссылаться на альтернативный URL для подмодуля git, в зависимости от того, где я клонировал супер-репо? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть рабочий процесс, в котором мне нужно иметь возможность получить несколько репозиториев с одного git-сервера (server1) и перенести их на другой git-сервер (server2). server2 находится в сети без доступа к Интернету, а некоторые репозитории используют подмодули, которые ссылаются на другие репозитории, которые находятся на server1.

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

Я думал о том, чтобы перенести субмодули на сервер2 и клонировать эти версии при клонировании супер-репо с сервера2. Как мне достичь этого, сохранив способность?

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

git clone --recurse-submodules https://server1/super-repo.git

git clone --recurse-submodules https://server2/super-repo.git (и напомним, что server2 не может достичь server1 при рекурсивном клонировании подмодулей)

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

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

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

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

0 голосов
/ 30 октября 2018

Возможно, в вашем случае стоит попытаться сделать следующее. Git хранит информацию о подмодулях в следующем месте: <root project folder>/.git/modules/<folder with name of your submodule>config. Файл конфигурации должен иметь раздел

[remote "origin"]
url = <url to your submodule>

Таким образом, возможно, вы могли бы использовать некоторый bash-скрипт, который переопределит этот параметр на server2, а затем - закроет подмодуль. Но затем, если придется изменить его обратно, поэтому после следующего извлечения с server1 не будет никаких конфликтов.

Также в корневой папке проекта есть файл .gitmodules, в котором содержится то же самое - информация об URL субмодулям. Возможно, достаточно просто изменить этот файл, и тогда во время клонирования он будет ссылаться на новый URL подмодуля. Но в этом случае изменение этого файла будет рассматриваться как изменение для git, т.к. этот файл находится под контролем исходного кода.

Другой альтернативой является локальный сервер git, который будет доступен для server2 и server1 через локальную сеть. Затем он может содержать ветвь подмодулей с сетевого сервера, но server1 и server2 будут получать обновления подмодулей с него ...

...