How To: Submodule - die SVN Externals für Git

How To: Submodule - die SVN Externals für Git

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:


BASH
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
git status
# On branch master
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
git status
# On branch master
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
git status
# On branch master
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
git status
# On branch master
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
git status
# On branch master
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
git status
# On branch master
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
git status
# On branch master
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
git status
# On branch master
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
git status
# On branch master
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
git status
# On branch master

Es existiert jetzt außerdem eine Datei .gitmodules, in dieser verwaltet git besagte Module:


BASH
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
git submodule init

Um die Submodule zu updaten reicht ein


BASH
git submodule update



Das entfernen von Submodulen ist leider noch ein wenig Handarbeit, da ein einfacher Befehl wie


BASH
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
[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
[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
git rm --cached library/facebook-php-sdk

Ein Git Submodule kann genau wie ein normales Git Repo behandelt werden innerhalb des jeweiligen Submodule-Ordners.

Autor mastercad
Veröffentlicht 02.01.2014