Wie kann ich das Update des Git-Submoduls erzwingen, um Fehler zu überspringen?

2

Ich habe meinen Ordner mit aktiven Projekten, an denen ich arbeite, und alle sind als Git-Submodule versioniert. Wenn ich eine neue Arbeitsumgebung einrichte, klone ich meinen Ordner mit --recursive (oder klonen Sie es normal und machen Sie es dann git submodule update --init --recursive. Genau wie bei Link Rot gibt es manchmal Git Remote Repo Rot (oder ein Server ist ausgefallen). In diesen Fällen möchte ich nur die verfügbaren Repos initialisieren / aktualisieren. Git wird jedoch bei dem ersten Problem, auf das es stößt, nicht mehr aktualisiert:

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

und der Prozess stoppt dort.

Wie kann ich git zwingen, solche Fehler zu ignorieren und einfach mit dem nächsten Submodul fortzufahren?

Raphael Schweikert
quelle

Antworten:

0

Mir ist kein Flag bekannt, das dazu führt, dass Git solche Fehler ignoriert. Deshalb habe ich ein Python-Skript geschrieben, das (ungefähr) das Gleiche bewirkt. Sie können dies in das Verzeichnis Ihres Hauptprojekts stellen.

#!/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
quelle