URL: https://linuxfr.org/news/tsrc-un-gestionnaire-de-depots-git Title: tsrc — un gestionnaire de dépôts git Authors: Dimitri Merejkowsky ZeroHeure, Davy Defaud, Pierre Jarillon, Benoît Sibaud et claudex Date: 2017年08月03日T17:17:17+02:00 License: CC By-SA Tags: tsrc et git Score: 31 Gérer du code dans plusieurs dépôts différents est toujours un peu compliqué. Chez [tanker.io](https://tanker.io) nous avons une petite équipe de développeurs, et chacun des membres peut être amené à coder dans plusieurs langages (C++, Go et JavaScript, principalement). Comme une grande partie du code est encore propriétaire, nous utilisons une instance GitLab hébergée dans nos locaux. Il existe plusieurs façons de gérer la synchronisation entre dépôts : la manière qui nous convient le mieux est d’avoir la même branche (ou le même _tag_) sur les dépôts concernés. Ceci nous a amené à développer notre propre outil, _tsrc_, qui est désormais disponible sur [GitHub](https://github.com/tankerapp/tsrc), sous licence BSD. ![tsrc-banner](https://dmerej.info/pub/tsrc-banner.png) Pourquoi GitHub et pas GitLab ? Simplement parce que GitHub, bien que propriétaire, assure une meilleure visibilité au projet. ---- [Le dépôt GitHub](https://github.com/tankerapp/tsrc) [La documentation](https://tankerapp.github.io/tsrc/) ---- ## Nos contraintes : * bonne prise en charge de Windows (ce qui exclut [_repo_](https://gerrit.googlesource.com/git-repo/) ou [_gws_](https://streakycobra.github.io/gws/)) ; * un seul fichier central permettant de connaître la liste précise des dépôts à cloner **et** leur localisation (ce qui exclut les outils comme [_mu-repo_](http://fabioz.github.io/mu-repo/), ou [_scm.py_](https://linuxfr.org/users/haypo/journaux/scm-py-gerer-simplement-plusieurs-depots-mercurial-et-git)) ; * d’un autre côté, nous n’avons pas vraiment besoin de gestion des dépendances entre dépôts (ce que _mu-repo_ gère bien), parce que nous préférons avoir un dépôt par langage ; * pas de dépôt « maître » contenant plusieurs sous‐dépôts (ce qui exclut _git-submodule_ et [_git-subrepo_](https://github.com/ingydotnet/git-subrepo)). ## Démonstration Vous pouvez vous faire une idée précise de comment fonctionne _tsrc_ en regardant la [démonstration que nous avons publiée sur asciinema](https://asciinema.org/a/131625). ## Installation `tsrc` est codé en Python et naturellement disponible sur _Pypi_. Il est utilisé par tous les membres de notre équipe, que ce soit sous GNU/Linux, macOS ou Windows. La version minimale requise pour `tsrc` est `Python3.3`. Notez que le support de Python 2.7 est exclu (simplement parce que Python3 est, de notre point de vue, un bien meilleur langage que Python2.7). Sur une distribution pas trop vieille (Python 3.3 étant sorti en 2012), un simple `pip3 install tsrc --user` fera donc l'affaire, après avoir rajouté `~/.local/bin` dans votre `PATH` au besoin. ## Utilisation ### Clone initial _tsrc_ fonctionne en utilisant un fichier « manifest » en YAML : ```yaml repos: - src: foo url: git@gitlab.local:acme/foo - src: bar url: git@gitlab.local:acme/bar ``` Le « manifest » en question doit être présent dans un dépôt Git. Cela fait, vous pouvez récupérer les dépôts en utilisant : ```console $ tsrc init git@gitlab.local:acme/manifest ``` ### Mise à jour des dépôts Vous pouvez mettre à jour tous les dépôts en utilisant : ```console $ tsrc sync ``` Un exemple de la sortie console : ![tsrc-sync](https://dmerej.info/blog/pics/tsrc-sync.png) Contrairement à _repo_, _tsrc_ essaie par tous les moyens d’éviter la perte de données ou les effets inattendus. Par exemple, si votre branche a divergé ou que votre dépôt n’est pas « propre », _tsrc_ préférera afficher un avertissement et vous laisser résoudre la situation par vous‐même. Notez que si vous n’aimez pas le fait que _tsrc_ « cache » les commandes `git`, vous pouvez utiliser l’option `--verbose`. ### Gestion des « fusiodemandes » GitLab Vous pouvez créer et accepter des « fusiodemandes » (_merge requests_) avec `tsrc push` après un peu de configuration. Pour l’instant, cela ne fonctionne qu’avec GitLab (puisque c’est ce que nous utilisons en interne), mais la prise en charge de Gerrit ou GitHub n’est pas exclue. ```console # Travail en cours sur ma-belle-branche $ tsrc push --assignee david # Crée une merge request assignée à David # La revue est terminée, on prévient GitLab que la branche # doit être fusionnée dès que l’intégration continue est passée : $ tsrc push --accept ``` ## Bonus _tsrc_ contient aussi quelques commandes pratiques comme `tsrc log` ou `tsrc foreach`, mais cette dépêche est déjà assez longue. ;-) # Appel à contributions Les retours sous toute forme sont les bienvenus, dans les commentaires ou directement sur GitHub.

AltStyle によって変換されたページ (->オリジナル) /