Como posso forçar a atualização do submódulo git --init para pular erros

2

Eu tenho minha pasta com projetos ativos em que estou trabalhando e todos eles são versionados como submódulos git. Quando eu configuro um novo ambiente de trabalho, eu clona minha pasta usando --recursive (ou clona normalmente e então faço git submodule update --init --recursive . Assim como o link rot, as vezes há git remot repo rot (ou um servidor pode estar inativo). Nestes casos eu quero iniciar / atualizar apenas os repositórios que estão disponíveis. No entanto, o git irá parar de atualizar no primeiro problema que encontrar:

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 '[email protected]:path/to.git' into submodule path 'dir/name' failed

e o processo pára por aí.

Como posso forçar o git a ignorar tais erros e apenas continuar até o próximo submódulo?

    
por Raphael Schweikert 31.05.2016 / 20:17

1 resposta

0

Eu não estou ciente de um sinalizador que fará com que o git ignore tais erros, então eu escrevi um script Python que alcançaria (aproximadamente) a mesma coisa. Você pode colocar isso no diretório do seu projeto principal.

#!/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()
    
por 11.11.2017 / 22:24

Tags