web-dev-qa-db-fra.com

Comment puis-je avoir des dépendances liées dans un repo git?

Dans mes scripts, j'utilise souvent des bibliothèques (les miennes ou d'autres) qui ont leur propre dépôt. Je ne veux pas les dupliquer dans mon dépôt et me contenter de les mettre à jour à chaque nouvelle version. Toutefois, lorsque quelqu'un clone le référentiel, il doit toujours fonctionner localement et ne pas avoir de liens rompus.

Des idées sur ce que je pourrais faire?

137
Lea Verou

Vous pouvez le faire avec des sous-modules dans git. Dans votre référentiel, faites:

git submodule add path_to_repo path_where_you_want_it

Donc, si le référentiel de la bibliothèque avait une URL de git://github.com/example/some_lib.git Et que vous le vouliez à lib/some_lib Dans votre projet, vous entreriez:

git submodule add git://github.com/example/some_lib.git lib/some_lib

Notez que cela doit être effectué à partir du répertoire de niveau supérieur de votre référentiel. Donc, ne pas cd dans le répertoire où vous le mettez en premier.

Après avoir ajouté un sous-module ou chaque fois que quelqu'un effectue une nouvelle extraction de votre référentiel, vous devez procéder comme suit:

git submodule init
git submodule update

Et tous les sous-modules que vous avez ajoutés seront extraits à la même révision que vous avez.

Lorsque vous souhaitez mettre à jour une version plus récente d'une des bibliothèques, cd dans le sous-module et tirez:

cd lib/some_lib
git pull

Ensuite, lorsque vous faites un git status, Vous devriez voir lib/somelib Répertorié dans la section modifiée. Ajoutez ce fichier, validez et vous êtes à jour. Lorsqu'un collaborateur récupère cette validation dans son référentiel, il verra que lib/somelib Est modifié jusqu'à ce qu'il exécute à nouveau git submodule update.

195
Emily