Git-submodules

Geavanceerd Git

Amanda Crawford-Adamo

Software and Data Engineer

Wat is een Git-submodule?

Git-submodule

git submodule
  • Een repo genest in een andere repo
  • Eigen versiebeheer en history
  • Wijzigingen in submodule raken de hoofdrepo niet
  • Hoofdrepo kan naar een specifieke versie van een submodule verwijzen

Een weergave van een repo met meerdere repos erin.

Geavanceerd Git

Een submodule toevoegen

Een submodule toevoegen via link of map onder het pad.

git submodule add <repository link|dir> <path>

$$

Voorbeeld

Voegt de data-validatorbibliotheek toe aan het ETL-project onder de map libs/validator in de ETL-repo.

git submodule add https://github.com/example/data-validator.git libs/validator
Geavanceerd Git

Submodules weergeven

Alle submodules in een project tonen

git submodule status

Voorbeeld

$ git submodule status
e1f2...7w8x9 data_cleaning_lib
a1b2...q7r8 api_connector
d9e8...t3u2 visualization_toolkit
Geavanceerd Git

Submodules bijwerken

Submodule bijwerken met de laatste wijzigingen

Opties:

  1. Werkt alle submodules bij waarvan de broncode lokaal staat.
    git submodule update --init 
    
  2. Werkt alle submodules bij waarvan de broncode op een remote staat.
    git submodule update --init --remote 
    
  3. Werkt één specifieke submodule bij
    git submodule update --init <path_to_submodule>
    
Geavanceerd Git

Submodules verwijderen

Submodule verwijderen

  1. De-initialiseer de submodule.
    git submodule deinit <submodule_name>
    
  2. Verwijder de submodule uit de Git-index.
    git rm <path>
    
Geavanceerd Git

Een submodule uit een grote repo halen

  1. Kopieer alle bestanden die in de nieuwe submodule-repo moeten staan naar een map buiten de repo.

  2. Maak in die map een nieuwe repo voor de submodule:

    git init <new-submodule>
    
  3. Gebruik git filter-repo om de relevante bestanden en history uit het hoofdproject te halen:

    git filter-repo --path <extract_path> --invert-paths
    
  4. Voeg de uitgepakte repo als submodule toe aan het hoofdproject:

    git submodule add <new-submodule_path> <path_to_store_submodule>
    
Geavanceerd Git

Wanneer submodules gebruiken + best practices

Use cases:

  1. Externe libraries beheren
  2. Code delen tussen projecten
  3. Specifieke dependency-versies vastzetten

Best practices:

  1. Houd submodules up-to-date
  2. Gebruik relatieve paden
  3. Communiceer wijzigingen met het team
Geavanceerd Git

Laten we oefenen!

Geavanceerd Git

Preparing Video For Download...