git-submodule
Una delle particolarità che più apprezzo di git è l'implementazione dei submodule (che credo non esistano né in svn né in mercurial).
I submodule servono per importare un altro repository git all'interno del proprio. Sono utilissimi quando si utilizzano librerie che usano git o che hanno un mirror git. I submodule infatti sono visti come repository separati, quindi si può cambiare branch, tag o vedere la history del repository incluso indipendentemente dal nostro progetto.
Per creare un nuovo submodule è sufficiente dare:
git submodule add git://github.com/USER/REPO.git mysubmodule
git submodule init
Il primo comando non fa altro che aggiungere il submodule ai file di configurazione del repository locale principale, il secondo lo scarica. E' poi necessario fare un commit, come si può vedere con un
git-statusIl repository importato sarà allineato a master, ma possiamo cambiare semplicemente così:
cd mysubmodule
git co v3.1.0
cd ..
git add mysubmodule
git commit
Ancora sporca invece la cancellazione di un submodule: si deve fare a mano cancellando i riferimenti al repository in
.gitmodules e .git/config e poi forzando la cancellazione:
git rm --cached mysubmodule

