How To: Submodule - die SVN Externals für Git
mastercad
02.01.2014 22:57:31
in Git gibt es die Möglichkeit, die aus SVN bekannten Externals per Submodule einzubinden. Git erkennt solche Externen Repos von Haus aus schon teilweise, sie werden aber nicht korrekt behandelt, was wir von Hand nacharbeiten müssen, damit alles korrekt funktioniert.
Anfangen werden wir mit dem einbinden einer API von Facebook, die unter https://github.com/facebook/facebook-php-sdk.git :
Wir legen uns also ein neues Projekt an, wechseln da hinein und initialisieren dieses, dann legen wir den library Ordner an und fügen das Submodule hinzu:
damit ist das Submodul angelegt und für Git bekannt:
Es existiert jetzt außerdem eine Datei .gitmodules, in dieser verwaltet git besagte Module:
Die Submodule sind nun bei jedem clone vorerst leer und müssen von Hand initialisiert werden:
Um die Submodule zu updaten reicht ein
Das entfernen von Submodulen ist leider noch ein wenig Handarbeit, da ein einfacher Befehl wie
existiert leider nicht.
Entfernt werden Submodule wie folgt:
Wir löschen die zutreffenden Einträge aus der .gitmodule:
Wir löschen den zutreffenden Eintrag aus der .git/config:
Und wir löschen das Repo aus dem Git Cache:
Ein Git Submodule kann genau wie ein normales Git Repo behandelt werden innerhalb des jeweiligen Submodule-Ordners.
Anfangen werden wir mit dem einbinden einer API von Facebook, die unter https://github.com/facebook/facebook-php-sdk.git :
Wir legen uns also ein neues Projekt an, wechseln da hinein und initialisieren dieses, dann legen wir den library Ordner an und fügen das Submodule hinzu:
BASH code
mkdir NewProject cd NewProject git init mkdir library git submodule add https://github.com/facebook/facebook-php-sdk.git library/facebook-php-sdk
damit ist das Submodul angelegt und für Git bekannt:
BASH code
git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: .gitmodules # new file: library/facebook-php-sdk #
Es existiert jetzt außerdem eine Datei .gitmodules, in dieser verwaltet git besagte Module:
BASH code
cat .gitmodules [submodule "library/facebook-php-sdk"] path = library/facebook-php-sdk url = https://github.com/facebook/facebook-php-sdk.git
Die Submodule sind nun bei jedem clone vorerst leer und müssen von Hand initialisiert werden:
BASH code
git submodule init
Um die Submodule zu updaten reicht ein
BASH code
git submodule update
Das entfernen von Submodulen ist leider noch ein wenig Handarbeit, da ein einfacher Befehl wie
BASH code
git submodule rm library/facebook-php-sdk
existiert leider nicht.
Entfernt werden Submodule wie folgt:
Wir löschen die zutreffenden Einträge aus der .gitmodule:
BASH code
[submodule "library/facebook-php-sdk"] path = library/facebook-php-sdk url = https://github.com/facebook/facebook-php-sdk.git
Wir löschen den zutreffenden Eintrag aus der .git/config:
BASH code
[submodule "library/facebook-php-sdk"] url = https://github.com/facebook/facebook-php-sdk.git
Und wir löschen das Repo aus dem Git Cache:
BASH code
git rm --cached library/facebook-php-sdk
Ein Git Submodule kann genau wie ein normales Git Repo behandelt werden innerhalb des jeweiligen Submodule-Ordners.