Projet

Général

Profil

Suivi d’un dépôt bzr depuis git

L’idée est d’utiliser git tout en suivant les modifications upstream qui sont faites dans un dépôt bzr

Pour ce faire nous créerons une branche spécifique qui sera un miroir des développements upstream.

Nous finirons avec les branches suivantes :

  • bzr/upstream: Branche de synchronisation utilisée par git-bzr, ne doit jamais être modifiée autrement que par l’outil ;
  • upstream: Branche de synchronisation utilisée par git-bzr, ne doit jamais être modifiée autrement que par l’outil ;
  • master: Branche de développement EOLE.

Règle №1: Il ne faut jamais modifier la branche bzr/upstream, ni placer dans cette branche.

La branche bzr/upstream est mise à jours par les commandes git bzr sync bzr/upstream et git bzr pull bzr/upstream mais l’espace de travail n’est pas mis à jour si la branche courante est bzr/upstream lorsque ces commandes sont invoquées.

Dans ce cas il faut forcer la mise à jour de l’espace de travail:

moi@work:~/src/cdimage(bzr/upstream):$ git reset --hard HEAD

Il est possible d’invoquer git bzr sync bzr/upstream depuis n’importe quelle branche, seule la branche bzr/upstream sera modifiée, il est ensuite possible de fusionner les modifications dans d’autres branches :

moi@work:~/src/cdimage(moi/test/bzr):$ git bzr sync bzr/upstream
15:09:08 Calculating the revisions to include ...
15:09:08 Starting export of 960 revisions ...
15:09:08 Exported 960 revisions in 0:00:00
moi@work:~/src/cdimage(moi/test/bzr):$ 
moi@work:~/src/cdimage(moi/test/bzr):$ git merge bzr/upstream
Updating 5aa84e2..ba4f520
[...]

La commande git bzr pull bzr/upstream n’a d’utilitée que dans la branche upstream, elle est équivalente à :

1. git bzr pull bzr/upstream
2. git merge bzr/upstream

En dehors de la branche upstream, elle n’exécute que la première partie.

Prérequis

bzr et bzr-fast-import doivent être installés.

Plugin git-bzr

Un plugin est nécessaire afin de suivre le dépôt bzr: bzr-git-ng.

L’exécutable git-bzr doit se trouver dans le PATH, un répertoir ~/bin est ajouté à celui-ci, il contiendra un lien vers l’exécutable qui pourra ainsi facilement être mis à jour:

moi@work:~$ mkdir bin src
moi@work:~$ echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc
moi@work:~$ cd src && git clone git://github.com/termie/git-bzr-ng.git
moi@work:~$ cd ~/bin && ln -s ~/src/git-bzr-ng/git-bzr

Exemple réel de suivi d’un projet bzr

Ces explications sont basés sur le suivi de l’outil CDimage.

La branche dédié à upstream se nomme ubuntu afin d’identifier la source, cela peut-être utile lors du suivi de plusieurs branches et/ou dépôt upstream.

Les branches sont donc les suivantes:

  • bzr/ubuntu: Branche de synchronisation utilisée par git-bzr, ne doit jamais être modifiée autrement que par l’outil ;
  • ubuntu: Branche de synchronisation utilisée par git-bzr, ne doit jamais être modifiée autrement que par l’outil ;
  • master: Branche de développement EOLE.

Mise en place du suivi des modifications upstream

Si vous souhaitez suivre directement la version upstream maintenue dans un dépôt bzr, il faut effectuer les actions suivantes:

Clone du dépôt EOLE

moi@work:~/src/$ git clone http://dev-eole.ac-dijon.fr/git/cdimage
Cloning into cdimage...
moi@work:~/src/$ cd cdimage && git checkout -b moi/test/bzr

Il est possible de partir d’un dépôt vide :

moi@work:~/src/$ mkdir projet && cd projet
moi@work:~/src/projet$ git init

Importer le dépôt bzr upstream dans une branche git spécifique:

Le nom de la branche ne doit pas entrer en confilt avec une branche locale, j’ai choisi ubuntu pour visualiser qu’il s’agit de la version Ubuntu de l’outil :

moi@work:~/src/cdimage(moi/test/bzr)$ git bzr import http://people.canonical.com/~cjwatson/bzr/cdimage/mainline ubuntu
Branched 867 revision(s).hing revisions:Finishing stream:Done 9846/98469846
14:29:38 Calculating the revisions to include ...
14:29:38 Starting export of 956 revisions ...
14:29:43 Exported 956 revisions in 0:00:04
moi@work:~/src/cdimage(moi/test/bzr)$ git branch
  bzr/ubuntu
  master
* moi/test/bzr
  ubuntu

NB: si vous partez d’un dépôt vide, il faut créer la branche master:

moi@work:~/src/projet()$ git checkout -b master ubuntu
Checking out files: 100% (1291/1291), done.
Already on 'master'
moi@work:~/src/projet(master)$ git branch
  bzr/ubuntu
* master
  ubuntu

Mettre à jour le suivi du dépôt upstream

moi@work:~/src/cdimage(moi/test/bzr)$ git bzr sync bzr/ubuntu
http://people.canonical.com/~cjwatson/bzr/cdimage/mainline is permanently redirected to http://people.canonical.com/~cjwatson/bzr/cdimage/mainline/
14:31:51 Calculating the revisions to include ...
14:31:51 Starting export of 956 revisions ...
14:31:51 Exported 956 revisions in 0:00:00

Intégrer les modifications upstream à une branche locale

moi@work:~/src/cdimage(moi/test/bzr)$ git merge bzr/ubuntu
Updating 5aa84e2..ba4f520
[...]

Paramètre de configuration spécifique à git-bzr

moi@work:~/src/cdimage(moi/test/bzr)$ git config -l
[...]
bzr.ubuntu.bzr=bzr/ubuntu
bzr.bzr/ubuntu.upstream=http://people.canonical.com/~cjwatson/bzr/cdimage/mainline