Перейти к содержимому

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

1

У меня есть папка с активными проектами, над которыми я работаю, и все они имеют версии подмодулей git. Когда я настраиваю новую рабочую среду, я клонирую свою папку, используя --recursive(или клонирую ее как обычно, а затем делаю git submodule update --init --recursive. Так же, как гниль ссылок, иногда есть git remote repo rot (или сервер может быть недоступен). В этих случаях я хочу инициализировать / обновить только доступные репозитории, однако 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 игнорировать такие ошибки и просто переходить к следующему подмодулю?

1 088 просмотров
Raphael Schweikert спросил 10 лет назад
R 157

1 ответ

0

Я не знаю флаг, который заставит 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() 
user2468842 ответил 8 лет назад
U 1