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