Heute bin ich zum ersten Mal auf das Konzept der Submodule in Git gestoßen. Beim Klonen eines Repositorys von GitHub fiel mir auf, dass ein Ordner darin leer blieb. Bei genauerem Hinsehen fand ich einen Verweis auf einen anderen Repository-Baum, etwa so:

Hier stammt der Ordner htslib eigentlich aus einem Baum in einem anderen Repository. Nachdem ich das Repository so geklont hatte (vorher geforkt):
git clone https://github.com/fischuu/SE-MEI.git
blieb der Ordner htslib leer. Das liegt daran, dass Dateien aus Submodulen standardmäßig nicht geholt werden. Das muss man separat machen, indem man zuerst die Submodule initialisiert (vorher ins geklonte Repository wechseln)
git submodule init
und dann deren Dateien aktualisiert
git submodule update
Danach sollte das Repository vollständig sein. Statt die Submodule separat zu initialisieren, gibt es auch eine Abkürzung, die alles in einem Schritt holt, indem man beim Klonen einen zusätzlichen Parameter angibt, etwa so:
git clone --recurse-submodules https://github.com/fischuu/SE-MEI.git
Mehr Details zu Git-Submodulen gibt es hier.