====== Maintenir son paquet avec git-buildpackage ====== * Objet : Installation, configuration et utilisation de git-buildpackage * Niveau requis : {{tag>avisé}} * Commentaires : //Pour maintenir vos paquets Debian sous git avec git-buildpackage. // * À savoir : [[:doc:mentors:mentors|Contribuer à Debian]] :-) * Suivi : {{tag>à-tester}} * Création par [[user>captnfab]] 28/02/2014 * Testé par <...> le <...> * Commentaires sur le forum : [[https://debian-facile.org/topic-8552-wiki-mentors-maintenir-ses-paquets-debian-avec-git-buildpackage-page-1.html | ici]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) **Nota :** Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! ===== Introduction ===== Les paquets évoluent, au fil des versions, les patchs à effectuer pour intégrer correctement les paquets à Debian diffèrent. Les corrections de bugs sont intégrées par //upstream//((le développeur amont du logiciel empaqueté)). Pour s'y retrouver, il est conseillé de maintenir les sources de son paquet Debian via un VCS((Gestionnaire de versions concurentes)), tel que **subversion**, **mercurial** ou **git**. Nous allons traiter ici le cas d'un paquet géré sous **git** via les utilitaires **git-buildpackage**. ===== Installation ===== On installe //git-buildpackage// ainsi que quelques outils qui nous seront utiles : apt-get install git gitk git-buildpackage pristine-tar ===== Configuration ===== ==== Configuration de Git ==== git config --global user.name "Votre Nom" git config --global user.email votre@adresse-email.org Si vous avez une clé GPG FIXME : git config --global user.signingkey "0xXXXXXXXX" ==== Configuration de Git-BuildPackage ==== Créer le fichier ''~/.gbp.conf'' contenant le texte suivant : [DEFAULT] # Sign tags by default: sign-tags = True keyid = 0xXXXXXXXX # use pristine tar by defaul pristine-tar = True [dch] # Parse meta tags like Closes: from commit messages meta = True # Add seven digits of the commits sha1 to the commit message id-length = 7 # Regex for matching bugs to close meta-closes = Closes|LP|BZ # Use the full commit message instead of the first line only full = True # Ignore these in commit messages ignore-regex = (Signed-off|Acked)-by: [buildpackage] # Automatically push to remote repo after tagging a new release posttag = /usr/share/doc/git-buildpackage/examples/gbp-posttag-push # Run Lintian after a succesful build postbuild = lintian $GBP_CHANGES_FILE # Build command builder = dpkg-buildpackage -i -I -uc -us # Clean command cleaner = /bin/true [import-orig] # Automatically forward the changelog after importing a new upstream version postimport = git-dch -N%(version)s -S -a --debian-branch=$GBP_BRANCH Remplacer ''0xXXXXXXXX'' par l'id de votre clé GPG ! ===== Utilisations ===== ==== Gérer les patchs via une branche ''patch-queue'' ==== Pour gérer les patchs de debian/patchs, on peut utiliser une branche git. * Cela nous permet pour chaque branche //foo// d'avoir la branche non-patchée (//foo//) et la branche patchée (//patch-queue/foo//) * Un commit dans la //patch-queue// correspond exactement à un patch dans ''debian/patches/'' * Les patchs peuvent facilement être supprimés, ou ajoutés en modifiant la branche //patch-queue// (et en évitant de se tromper en utilisant //quilt add//, //dpatch-edit-patch//, //cdbs-edit-patch//, etc.) * Les patchs peuvent facilement être portés sur les nouvelles versions grâce à ''git rebase'' sur la branche //patch-queue// (les patchs appliqués par //upstream// sont automatiquement détectés). * Les patchs générés dans ''debian/patches/'' ont toutes les informations nécessaires pour être envoyés à //upstream//. Inconvénient : * Pas d'historique sur la branche //patch-queue/foo//, mais bien sûr l'historique de la branche //foo// reste disponible. === Créer la branche de patchs === gbp pq import Cela changera la branche courante du dépôt à //patch-queue/master//. === Travailler sur les patchs === * Un commit = un patch * C'est une branche git classique === Re-générer les fichiers de patchs === gbp pq export Cela changera la branche courante du dépôt à //master//. === Enregistrer les modifications === git add debian/patches git commit === Mettre à jour le changelog === git-dch -S -a === Construire le paquet === * Voir plus bas. === Après avoir importé une nouvelle release === gbp pq rebase git checkout master gbp pq export === Si des commits ont été fait sur //master// depuis la dernière mise à jour === gbp pq rebase === Créer un premier patch === * gbp pq import * Créer le patch et en faire un commit * Générer le fichier patch pour quilt : git checkout master gbp pq export * Commit: git add -a debian/patches/ git commit -m 'mon premier patch' ==== Cloner un dépôt git-buildpackage existant ==== gbp clone adresse-du-dépôt-git ==== Garder un dépôt jour ==== Après un clone initial avec ''gbp clone'', vous pouvez exécuter //gbp pull// pour mettre à jour les branches //debian//, //upstream// et //pristine-tar// depuis le dépôt distant. Le flot de travail ressemble alors à cela : * Initiallement, cloner le dépôt une fois gbp clone adresse/du/dépôt.git cd dépôt * Travailler sur ce clone, faire des commits, récupérer les releases, faire des pushs, etc. * Pour récupérer après quelques jours les mises à jours faites par vos collègues : gbp pull --redo-pq Cela mettra à jour toutes les branches en fonction des modifications faites par vos collaborateurs, et regénérera la branche de patchs. ==== Compilation du paquet === À faire depuis la branche //patch-queue/master// à jour : export DEB_HOST_ARCH=amd64 export ARCH=amd64 export DIST=sid git-buildpackage --git-pbuilder --git-arch=$ARCH --git-dist=$DIST --git-debian-branch=patch-queue/master Vous pouvez ajouter l'option ''--git-tag'' pour tagger et uploader la version en cours. ===== Quelques rappels de git ===== * Supprimer un tag localement et à distance : git tag -d nomdutag && git push origin nomdutag * Revenir irréversiblement à un ancien commit : git reset --hard hashprefix-du-commit * Établir une branche basée sur un ancien commit : git checkout -b nomdelabranche hashprefix-du-commit ==== Références ==== * [[http://stackoverflow.com/questions/6151970/how-do-you-remove-a-tag-from-a-remote-repository|How do you remove a tag from a remote repository]] * [[http://stackoverflow.com/questions/4114095/revert-to-previous-git-commit|How to revert to a previous git commit]] ===== Références ===== * [[http://mentors.debian.net|Debian Mentors]] * [[https://honk.sigxcpu.org/piki/development/debian_packages_in_git/|Debian packages in git]] * [[http://honk.sigxcpu.org/projects/git-buildpackage/manual-html/gbp.html|Building Debian Packages with git-buildpackage]] * [[https://wiki.debian.org/Alioth/Git#Using_personal_Git_repositories|Utiliser Git sur Alioth]]