grimboite/old/2015-07-23-git-submodules.md

2.8 KiB

Title Tags Date
Git submodules
git
vcs
2015-07-23

Pour éviter de se trimballer toutes les dépendances d'un projet au sein-même des sources (et éviter les incohérences, les changements de versions, tout ça), plein de solutions existent: pip pour les projets Python, bower pour des sources Web, npm pour Node, ...

Vu que la plupart de mes projets sont en Python, une première solution serait d'utiliser pip avec la commande -e, et de lui indiquer le chemin vers le dépôt souhaité.

pip install -e git+https://github.com/PurePelicanTheme/pure.git#egg=puretheme

Petit problème: pip s'attend bien à installer la dépendance. Forcément, lorsqu'il aura terminé de télécharger le dépôt distant, on va rencontrer une erreur, puisqu'il va chercher un fichier setup.py:

pip install -e git+https://github.com/PurePelicanTheme/pure.git#egg=PureTheme
Obtaining PureTheme from git+https://github.com/PurePelicanTheme/pure.git#egg=PureTheme
  Updating /home/fred/Sources/grimboite/src/puretheme clone
  Running setup.py (path:/home/fred/Sources/grimboite/src/puretheme/setup.py) egg_info for package PureTheme
    Traceback (most recent call last):
      File "<string>", line 17, in <module>
    IOError: [Errno 2] No such file or directory: '/home/fred/Sources/grimboite/src/puretheme/setup.py'
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):

  File "<string>", line 17, in <module>

IOError: [Errno 2] No such file or directory: '/home/fred/Sources/grimboite/src/puretheme/setup.py'

----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /home/fred/Sources/grimboite/src/puretheme
Storing debug log for failure in /home/fred/.pip/pip.log

L'autre solution, si vous utilisez Git, ce sont les sous-modules: cela consiste à initialiser un répertoire dans lequel va se trouver la branche correspondante du dépôt que vous lui indiquerez. Les dépendances sont renseignées dans le fichier .gitmodules, à la racine de votre dépôt.

Pour initialiser un nouveau dépôt: git submodule init <url> {path}

Toutes les informations sont stockées dans le fichier .gitmodules, qui se trouve à la racine de votre projet. Chaque projet sera indiqué, avec son url de téléchargement et le chemin vers lequel il sera stocké.

[submodule "blue-penguin"]
    path = themes/blue-penguin
    url = https://github.com/jody-frankowski/blue-penguin.git
[submodule "themes/pure"]
    path = themes/pure
    url = https://github.com/PurePelicanTheme/pure.git

Pour finir, il existe une commande qui permet de mettre chaque sous-module à jour: git submodule update --init --recursive.