From 5e68be60bea67f6d12d76b765ce131c5982550e3 Mon Sep 17 00:00:00 2001 From: Adrien Ollier Date: Fri, 15 Sep 2023 21:31:27 +0200 Subject: [PATCH] Bazaar est mort --- .../sections/client-bzr.asc | 134 ---------------- .../sections/import-bzr.asc | 145 ------------------ ch09-git-and-other-systems.asc | 4 - 3 files changed, 283 deletions(-) delete mode 100644 book/09-git-and-other-scms/sections/client-bzr.asc delete mode 100644 book/09-git-and-other-scms/sections/import-bzr.asc diff --git a/book/09-git-and-other-scms/sections/client-bzr.asc b/book/09-git-and-other-scms/sections/client-bzr.asc deleted file mode 100644 index 4f6d10f..0000000 --- a/book/09-git-and-other-scms/sections/client-bzr.asc +++ /dev/null @@ -1,134 +0,0 @@ -==== Git et Bazaar - -Parmi tous les systèmes de contrôle de version distribués, un des plus connus est https://bazaar.canonical.com/[Bazaar]. -Bazaar est libre et open source, et fait partie du https://www.gnu.org/[Projet GNU]. -Il a un comportement très différent de Git. -Parfois, pour faire la même chose que Git, il vous faudra utiliser un mot-clé différent, et quelques mots-clés communs n'ont pas la même signification. -En particulier, la gestion des branches est très différente et peut être déroutante, surtout pour quelqu'un qui viendrait du monde de Git. -Toutefois, il est possible de travailler sur un dépôt Bazaar depuis un dépôt Git. - -Il y a plein de projets qui permettent d'utiliser Git comme client d'un dépôt Bazaar. -Ici nous utiliserons le projet de Felipe Contreras que vous pouvez trouver à l'adresse https://github.com/felipec/git-remote-bzr. -Pour l'installer, il suffit de télécharger le fichier `git-remote-bzr` dans un dossier de votre `$PATH` et de le rendre exécutable : -[source,console] ----- -$ wget https://raw.github.com/felipec/git-remote-bzr/master/git-remote-bzr -O ~/bin/git-remote-bzr -$ chmod +x ~/bin/git-remote-bzr ----- - -Vous devez aussi avoir Bazaar installé. -C'est tout ! - - -===== Créer un dépôt Git depuis un dépôt Bazaar - -C'est simple à utiliser. -Il suffit de cloner un dépôt Bazaar en préfixant son nom par `bzr::`. -Puisque Git et Bazaar font des copies complètes sur votre machine, il est possible de lier un clone Git à votre clone Bazaar local, mais ce n'est pas recommandé. -Il est beaucoup plus facile de lier votre clone Git directement au même endroit que l'est votre clone Bazaar ‒ le dépôt central. - -Supposons que vous travailliez avec un dépôt distant qui se trouve à l'adresse `bzr+ssh://developpeur@monserveurbazaar:monprojet`. -Alors vous devez le cloner de la manière suivante : -[source,console] ----- -$ git clone bzr::bzr+ssh://developpeur@monserveurbazaar:monprojet monProjet-Git -$ cd monProjet-Git ----- - -A ce stade, votre dépôt Git est créé mais il n'est pas compacté pour un usage optimal de l'espace disque. -C'est pourquoi vous devriez aussi nettoyer et compacter votre dépôt Git, surtout si c'est un gros dépôt : -[source,console] ----- -$ git gc --aggressive ----- - - -===== Les branches Bazaar - -Bazaar ne vous permet de cloner que des branches, mais un dépôt peut contenir plusieurs branches, et `git-remote-bzr` peut cloner les deux. -Par exemple, pour cloner une branche : -[source,console] ----- -$ git clone bzr::bzr://bzr.savannah.gnu.org/emacs/trunk emacs-trunk ----- - -Et pour cloner le dépôt entier : -[source,console] ----- -$ git clone bzr::bzr:/bzr.savannah.gnu.org/emacs emacs ----- - -La seconde commande clone toutes les branches contenues dans le dépôt emacs ; néanmoins il est possible de spécifier quelques branches : -[source,console] ----- -$ git config remote-bzr.branches 'trunk, xwindow' ----- - -Certains dépôts ne permettent pas de lister leurs branches, auquel cas vous devez les préciser manuellement, et même si vous pourriez spécifier la configuration dans la commande de clonage, vous pourriez trouver ceci plus facile : -[source,console] ----- -$ git init emacs -$ git remote add origin bzr::bzr://bzr.savannah.gnu.org/emacs -$ git config remote-bzr.branches 'trunk, xwindow' -$ git fetch ----- - - -===== Ignorer ce qui est ignoré avec .bzrignore - -Puisque vous travaillez sur un projet géré sous Bazaar, vous ne devriez pas créer de fichier `.gitignore` car vous pourriez le mettre accidentellement en gestion de version et les autres personnes travaillant sous Bazaar en seraient dérangées. -La solution est de créer le fichier `.git/info/exclude`, soit en tant que lien symbolique, soit en tant que véritable fichier. -Nous allons voir plus loin comment trancher cette question. - -Bazaar utilise le même modèle que Git pour ignorer les fichiers, mais possède en plus deux particularités qui n'ont pas d'équivalent dans Git. -La description complète se trouve dans http://doc.bazaar.canonical.com/bzr.2.7/en/user-reference/ignore-help.html[la documentation]. -Les deux particularités sont : - -1. le "!!" en début de chaîne de caractères qui prévaut sur le "!" en début de chaîne, ce qui permet d'ignorer des fichiers qui auraient été inclus avec "!" -2. les chaînes de caractères commençant par "RE:". -Ce qui suit "RE:" est une http://doc.bazaar.canonical.com/bzr.2.7/en/user-reference/patterns-help.html[expression rationnelle]. -Git ne permet pas d'utiliser des expressions rationnelles, seulement les globs shell. - -Par conséquent, il y a deux situations différentes à envisager : - -1. Si le fichier `.bzrignore` ne contient aucun de ces deux préfixes particuliers, alors vous pouvez simplement faire un lien symbolique vers celui-ci dans le dépôt. -2. Sinon, vous devez créer le fichier `.git/info/exclude` et l'adapter pour ignorer exactement les mêmes fichiers que dans `.bzrignore`. - -Quel que soit le cas de figure, vous devrez rester vigilant aux modifications du fichier `.bzrignore` pour faire en sorte que le fichier `.git/info/exclude` reflète toujours `.bzrignore`. -En effet, si le fichier `.bzrignore` venait à changer et comporter une ou plusieurs lignes commençant par "!!" ou "RE:", Git ne pouvant interpréter ces lignes, il vous faudra adapter le fichier `.git/info/exclude` pour ignorer les mêmes fichiers que ceux ignorés avec `.bzrignore`. -De surcroît, si le fichier `.git/info/exclude` était un lien symbolique vers `.bzrignore`, il vous faudra alors d'abord détruire le lien symbolique, copier le fichier `.bzrignore` dans `.git/info/exclude` puis adapter ce dernier. -Attention toutefois à son élaboration car avec Git il est impossible de ré-inclure un fichier dont l'un des dossiers parent a été exclu. - - -===== Récupérer les changements du dépôt distant - -Pour récupérer les changements du dépôt distant, vous tirez les modifications comme d'habitude, en utilisant les commandes Git. -En supposant que vos modifications sont sur la branche `master`, vous fusionnez ou rebasez votre travail sur la branche `origin/master` : -[source,console] ----- -$ git pull --rebase origin ----- - - -===== Pousser votre travail sur le dépôt distant - -Comme Bazaar a lui aussi le concept de _commits_ de fusion, il n'y aura aucun problème si vous poussez un _commit_ de fusion. -Donc vous créez vos branches et travaillez dessus, vous testez et validez votre travail par l'intermédiaire de _commits_ comme d'habitude, puis vous fusionnez vos modifications dans `master` et vous poussez votre travail sur le dépôt Bazaar : -[source,console] ----- -$ git push origin master ----- - -===== Mise en garde - -Le cadriciel de l'assistant de dépôt distant de Git a des limitations qui s'imposent. -En particulier, les commandes suivantes ne fonctionnent pas : - -* git push origin :branche-à-effacer (Bazaar n'accepte pas de supprimer une branche de cette façon) -* git push origin ancien:nouveau (il poussera 'ancien') -* git push --dry-run origin branch (il poussera) - -===== Résumé - -Comme les modèles de Git et de Bazaar sont similaires, il n'y a pas beaucoup de difficulté à travailler à la frontière. -Tant que vous faites attention aux limitations, et tant que vous êtes conscient que le dépôt distant n'est pas nativement Git, tout ira bien. diff --git a/book/09-git-and-other-scms/sections/import-bzr.asc b/book/09-git-and-other-scms/sections/import-bzr.asc deleted file mode 100644 index 8bb40aa..0000000 --- a/book/09-git-and-other-scms/sections/import-bzr.asc +++ /dev/null @@ -1,145 +0,0 @@ -==== Bazaar -(((Bazaar)))(((Importation, depuis Bazaar))) - -Bazaar est un système de contrôle de version distribué tout comme Git, en conséquence de quoi il est assez facile de convertir un dépôt Bazaar en un dépôt Git. -Pour cela, vous aurez besoin d'importer le plugin `bzr-fastimport`. - - -===== Obtenir le plugin bzr-fastimport - -La procédure d'installation du plugin `bzr-fastimport` est différente sur les systèmes type UNIX et sur Windows. -Dans le premier cas, le plus simple est d'installer le paquet `bzr-fastimport` avec toutes les dépendances requises. - -Par exemple, sur Debian et dérivés, vous feriez comme cela : -[source,console] ----- -$ sudo apt-get install bzr-fastimport ----- - -Avec RHEL, vous feriez ainsi : -[source,console] ----- -$ sudo yum install bzr-fastimport ----- - -Avec Fedora, depuis la sortie de la version 22, le nouveau gestionnaire de paquets est dnf : -[source,console] ----- -$ sudo dnf install bzr-fastimport ----- - -Si le paquet n'est pas disponible, vous pouvez l'installer en tant que plugin : -[source,console] ----- -$ mkdir --parents ~/.bazaar/plugins/ # crée les dossiers nécessaires aux plugins -$ cd ~/.bazaar/plugins/ -$ bzr branch lp:bzr-fastimport fastimport # importe le plugin bzr-fastimport -$ cd fastimport -$ sudo python setup.py install --record=files.txt # installe le plugin ----- - -Pour que ce plugin fonctionne, vous aurez aussi besoin du module Python `fastimport`. -Vous pouvez vérifier s'il est présent ou non et l'installer avec les commandes suivantes : -[source,console] ----- -$ python -c "import fastimport" -Traceback (most recent call last): - File "" , line 1, in -ImportError: No module named fastimport -$ pip install fastimport ----- - -S'il n'est pas disponible, vous pouvez le télécharger à l'adresse https://pypi.python.org/pypi/fastimport/. - -Dans le second cas (sous Windows), `bzr-fastimport` est automatiquement installé avec la version _standalone_ et l'installation par défaut (laisser toutes les cases à cocher cochées). -Alors, vous n'avez rien à faire. - -À ce stade, la façon d'importer un dépôt Bazaar diffère selon que vous n'avez qu'une seule branche ou que vous travaillez avec un dépôt qui a plusieurs branches. - - -===== Projet avec une seule branche - -Maintenant positionnez-vous dans le dossier qui contient votre dépôt Bazaar et initialisez le dépôt Git : -[source,console] ----- -$ cd /chemin/vers/le/depot/bzr -$ git init ----- - -Vous pouvez exporter simplement votre dépôt Bazaar et le convertir en un dépôt Git avec la commande suivante : -[source,console] ----- -$ bzr fast-export --plain . | git fast-import ----- - -Selon la taille du projet, votre dépôt Git est constitué dans un délai allant de quelques secondes à plusieurs minutes. - -===== Cas d'un projet avec une branche principale et une branche de travail - -Vous pouvez aussi importer un dépôt Bazaar qui contient plusieurs branches. -Supposons que vous avez deux branches : l'une représente la branche principale (monProjet.trunk), l'autre est la branche de travail (monProjet.travail). -[source,console] ----- -$ ls -monProjet.trunk monProjet.travail ----- - -Créez le dépôt Git et placez-vous-y : -[source,console] ----- -$ git init depot-git -$ cd depot-git ----- - -Tirez la branche principale dans le dépôt git : -[source,console] ----- -$ bzr fast-export --marks=../marks.bzr --plain ../monProjet.trunk | \ -git fast-import --export-marks=../marks.git ----- - -Tirez la branche de travail dans le dépôt git : -[source,console] ----- -$ bzr fast-export --marks=../marks.bzr --plain --git-branch=travail ../monProjet.travail | \ -git fast-import --import-marks=../marks.git --export-marks=../marks.git ----- - -Maintenant, `git branch` vous montre la branche `master` tout comme la branche `travail`. -Vérifiez les logs pour vous assurer qu'ils sont complets et supprimez les fichiers `marks.bzr` et `marks.git`. - -===== Synchroniser l'index - -Quel que soit le nombre de branches que vous aviez et la méthode d'importation, votre index n'est pas synchronisé avec HEAD, et avec l'import de plusieurs branches, votre répertoire de travail n'est pas synchronisé non plus. -Cette situation se résout simplement avec la commande suivante : -[source,console] ----- -$ git reset --hard HEAD ----- - -===== Ignorer les fichiers qui étaient ignorés avec .bzrignore - -Occupons-nous maintenant des fichiers à ignorer. -Il faut tout d'abord renommer le fichier `.bzrignore` en `.gitignore`. -Si le fichier `.bzrignore` contient une ou des lignes commençant par "!!" ou "RE:", il vous faudra en plus le modifier et peut-être créer de multiples fichiers `.gitignore` afin d'ignorer exactement les mêmes fichiers que le permettait `.bzrignore`. - -Finalement, vous devrez créer un _commit_ qui contient cette modification pour la migration : -[source,console] ----- -$ git mv .bzrignore .gitignore -$ # modifier le fichier .gitignore au besoin -$ git commit -m 'Migration de Bazaar vers Git' ----- - -===== Envoyer votre dépôt git sur le serveur - -Nous y sommes enfin ! -Vous pouvez maintenant pousser votre dépôt sur son nouveau serveur d'hébergement : -[source,console] ----- -$ git remote add origin git@mon-serveur-git:mon-depot-git.git -$ git push origin --all -$ git push origin --tags ----- - -La migration de Bazaar vers Git est maintenant terminée, vous pouvez travailler sur votre dépôt git. diff --git a/ch09-git-and-other-systems.asc b/ch09-git-and-other-systems.asc index 232ca9a..48f963f 100644 --- a/ch09-git-and-other-systems.asc +++ b/ch09-git-and-other-systems.asc @@ -20,8 +20,6 @@ include::book/09-git-and-other-scms/sections/client-svn.asc[] include::book/09-git-and-other-scms/sections/client-hg.asc[] -include::book/09-git-and-other-scms/sections/client-bzr.asc[] - include::book/09-git-and-other-scms/sections/client-p4.asc[] [[s_migrating]] @@ -36,8 +34,6 @@ include::book/09-git-and-other-scms/sections/import-svn.asc[] include::book/09-git-and-other-scms/sections/import-hg.asc[] -include::book/09-git-and-other-scms/sections/import-bzr.asc[] - include::book/09-git-and-other-scms/sections/import-p4.asc[] include::book/09-git-and-other-scms/sections/import-custom.asc[]