Как я могу заставить git submodule update --init пропустить ошибки

у меня есть папка с активными проектами, над которыми я работаю, и все они версированы как подмодули git. При настройке новой рабочей среды я клонирую папку с помощью --recursive (или клонируйте его как обычно, а затем сделайте git submodule update --init --recursive. Так же, как link rot, иногда есть git remote repo rot (или сервер может быть отключен). В этих случаях я хочу init / update только доступные репозитории. Тем не менее, git прекратит обновление при первой же проблеме:

Cloning into 'dir/name'...
Connection closed by remote.host
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
Clone of 'user@example.com:path/to.git' into submodule path 'dir/name' failed

и процесс останавливаться на достигнутом.

как я могу заставить Git, чтобы игнорировать такие ошибки и просто перейдите к следующему субмодуль?

26
задан Raphael Schweikert
17.11.2022 7:59 Количество просмотров материала 3487
Распечатать страницу

1 ответ

Я не знаю флага, который заставит git игнорировать такие ошибки, поэтому я написал скрипт Python, который достиг бы (примерно) того же. Вы можете поместить это в каталог вашего основного проекта.

#!/usr/bin/python

import os


PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))


def main():
    # The following command may fail
    os.system('cd {} && git submodule update --init --recursive'.format(PROJECT_ROOT))

    # In case the above command failed, also go through all submodules and update them individually
    for root, dirs, files in os.walk(PROJECT_ROOT):
        for filename in files:
            if filename == '.gitmodules':
                with open(os.path.join(root, filename), 'r') as gitmodules_file:
                    for line in gitmodules_file:
                        line = line.replace(' ', '')
                        if 'path=' in line:
                            submodule = line.replace('path=', '')
                            os.system('cd {} && git submodule init {}'.format(root, submodule))
                            os.system('cd {} && git submodule update {}'.format(root, submodule))


if __name__ == '__main__':
    main()
0
отвечен user2468842 2022-11-18 15:47

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх