Projet

Général

Profil

Git Submodules ou Branches externes

Toutes les applications AbulÉdu utilisent du code en commun. Deux options sont possibles: soit le code commun est compilé sous forme de bibliothèques partagées (dll sous windows, so sous linux, dy* sous mac) ... soit on compile le code de ces libs dans nos applications au moment de la compilation du programme.

La 1ere option est la meilleure pour plein de bonnes raisons mais demande des compétences et du temps que nous n'avons pas. Nous avons donc décidés de compiler le code source des libs dans nos applications.

Au niveau du code source, l'arborescence est donc comme ceci: Arborescence_type et le code source des libs est donc dans la sous arborescence "lib".

SVN gère les branches externes très bien. Bzr fait appel à un plugin pour ça Bzr-externals ... mais Git semble faire appel encore à autre chose:

Ça porte donc le nom de submodules ou sous modules en français ... et à propos du français il y a de la doc: https://git-scm.com/book/fr/v1/Utilitaires-Git-Sous-modules

Nous sommes donc à la recherche d'un coup de main qui pourrait faire pour un projet "simple" la mise en oeuvre de la gestion des branches externes, vous pouvez vous appuyer sur le script git_external que j'ai développé en attendant mieux http://redmine.abuledu.org/issues/4874

Exemple, à l'heure actuelle si on clone le dépôt de mulot vous ne pouvez pas le compiler :

git clone http://redmine.abuledu.org/leterrier/leterrier-mulot/leterrier-mulot-git.git -b version-1.1-dev
cd leterrier-mulot-git
qmake -r

Vous ne pourrez pas le compiler car il manque les branches externes:

Reading /tmp/leterrier-mulot-git/src/src.pro
Cannot read /tmp/leterrier-mulot-git/src/lib/abuleduapplicationv1/abuleduapplicationv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuleduconstantesv1/abuleduconstantesv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuleducommonstatesv1/abuleducommonstatesv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuledustatemachinev1/abuledustatemachinev1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuleduexercicev1/abuleduexercicev1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuledutetev1/abuledutetev1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuledunetworkaccessmanagerv1/abuledunetworkaccessmanagerv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuleduflatboutonv1/abuleduflatboutonv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuledupageaccueilv1/abuledupageaccueilv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuledugraphicmenuv1/abuledugraphicmenuv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuledulabelv1/abuledulabelv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/maia/maia.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuledufilev1/abuledufilev1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuledumessageboxv1/abuledumessageboxv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuledusplashscreenv1/abuledusplashscreenv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuleduidentitesv1/abuleduidentitesv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuleduwidgetassistantetapesv1/abuleduwidgetassistantetapesv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuledupluginloaderv1/abuledupluginloaderv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuledusingletonv1/abuledusingletonv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuledulangv1/abuledulangv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuleduandroidsupportv1/abuleduandroidsupportv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuleduloggerv1/abuleduloggerv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuleduloadinganimationv1/abuleduloadinganimationv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuledumultimediav1/abuledumultimediav1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuledupicottsv1/abuledupicottsv1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuleduaudiov1/abuleduaudiov1.pri: No such file or directory
Cannot read /tmp/leterrier-mulot-git/src/lib/abuleduaproposv1/abuleduaproposv1.pri: No such file or directory

il faut donc récupérer les branches externes de code source des différentes libs pour pouvoir continuer ... et c'est ça que nous aimerions automatiser à l'aide d'une solution officielle Git et non d'un script maison, il semblerait que les git submodules permettent de faire ça ... merci pour votre aide !

La solution est donc bien d'utiliser les submodules, vous pouvez donc télécharger l'ensemble des sources de l'application en ajoutant l'option --recursive à la fin de la commande, comme par exemple

git clone http://redmine.abuledu.org/leterrier/leterrier-mulot/leterrier-mulot-git.git -b version-1.1-dev --recursive

ou si jamais vous oubliez l'option --recursive vous pourrez vous "rattraper ensuite" à l'aide de

git clone http://redmine.abuledu.org/leterrier/leterrier-mulot/leterrier-mulot-git.git -b version-1.1-dev
cd leterrier-mulot-git
git submodule update --init --recursive

Si vous voulez ajouter un submodule dans votre projet, par exemple

git submodule add -b version-1.1-exemples http://redmine.abuledu.org/leterrier/leterrier-mulot/leterrier-mulot-git.git src/exemples

Et si vous devez mettre à jour vos sous modules (quand ils ont eu une amélioration par exemple) vous pouvez le faire en une seule commande (pensez ensuite à faire un commit & push) :

git submodule foreach git pull origin master
Redmine Appliance - Powered by TurnKey Linux