Projet

Général

Profil

Bzr depuis git » Historique » Version 2

Version 1 (Daniel Dehennin, 03/11/2011 16:40) → Version 2/3 (Daniel Dehennin, 04/11/2011 23:01)

h1. 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":http://github.com/termie/git-bzr-ng, ne doit jamais être modifiée autrement que par l’outil ;
* upstream: Branche de synchronisation utilisée par "git-bzr":http://github.com/termie/git-bzr-ng, 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:

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

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 :

<pre>
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
[...]
</pre>

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.

h2. Plugin git-bzr

Un plugin est nécessaire afin de suivre le dépôt bzr: "bzr-git-ng":http://github.com/termie/git-bzr-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:

<pre>
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
</pre>

h2. Exemple réel de suivi d’un projet bzr

Ces explications sont basés sur le suivi de l’outil "CDimage":http://dev-eole.ac-dijon.fr/projects/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":http://github.com/termie/git-bzr-ng, ne doit jamais être modifiée autrement que par l’outil ;
* ubuntu: Branche de synchronisation utilisée par "git-bzr":http://github.com/termie/git-bzr-ng, ne doit jamais être modifiée autrement que par l’outil ;
* master: Branche de développement EOLE.

h3. 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:

h3. Clone du dépôt EOLE

<pre>
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
</pre>

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

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

h3. 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 :

<pre>
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
</pre>

<pre>
moi@work:~/src/cdimage(moi/test/bzr)$ git branch
bzr/ubuntu
master
* moi/test/bzr
ubuntu
</pre>

*NB*: si vous partez d’un dépôt vide, il faut créer la branche master:
<pre>
moi@work:~/src/projet()$ git checkout -b branch master ubuntu
Checking out files: 100% (1291/1291), done.
Already on 'master'

moi@work:~/src/projet(master)$ git branch
bzr/ubuntu
* master
ubuntu
</pre>

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

<pre>
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
</pre>

h3. Intégrer les modifications upstream à une branche locale

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

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

<pre>
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
</pre>