GIT SVN en dix minutes

Comment utiliser git sur un dépôt svn ?

On n'a parfois pas le choix, on doit travailler sur un projet qui dispose d'un dépôt [subversion] (oui oui,suivez mon [regard] ;) ).

Ceci impose donc d'être connecté pour faire ses [commits], ceci impose donc de penser à faire ses commits avant d'éditer un autre fichier, ceci impose donc, ..., bref vous l'avez compris je n'aime pas le côté limitant de svn. Il peut freiner votre envie de développer en sachant que vous ne pourrez garder trace de vos essais car vous ne pourrez pas les commiter.

On ne peut pas suivre le principe du /"commit early - commit often"/ (commite tôt - commite souvent, ndlr), principe pertinent car il permet de progresser très vite.

Voici une parade permettant d'utiliser [GIT], le gestionnaire de version [décentralisé] sur un dépôt svn, vous permettant ainsi de passer outre ces petites limitations.

subversion

regard

commits

GIT

décentralisé

La base

Récupérer la copie distante :

Veillez à avoir créer les dossiers tags et branches sur votre dépôt distantpour garder un schéma de répertoire à la svn.

,----

| git svn clone https://salix.svn.sourceforge.net/svnroot/salix/lxc-salix -T trunk -b branches -t tags

`----

On travaille :

,----

| code ...code...code...

| test

`----

On commite :

,----

| git add mon_fichier

| git commit -m "j'ai essayé ceci"

`----

On travaille :

,----

| vim fichier1 fichier2

`----

On choisit de ne commiter que les changements de fichier1 :

,----

| git add fichier1

| git commit -m "ceci semble mieux"

`----

On continue, on vérifie quels fichiers ont été modifiés :

,----

| git status

`----

On choisit les commits à réaliser, et on peut publier l'ensemble des commits sur le dépôts svn :

,----

| git add fichierX

| git commit -m "ça fonctionne avec ça"

| git svn dcommit

`----

Un peu plus que la base

Les branches

Envie de travailler sur une branche de test plutôt que sur la principale qui est la la branche trunk. Il faut créer une branche sur le dépôt svn puis travailler sur une branche locale qui est synchronisée avec le dépôt distant.

,----

| git svn branch -m "branche de test" testouille_b

| git checkout local/testouille_b testouille_b

`----

Les commits se font de la même manière (git commit .... git svn dcommit).

Pour retravailler sur la branche principale :

,----

| git checkout master

| git svn rebase

`----

Pour supprimer une branche :

,----

| git branch -D local/testouille_b

| git branch -D -r testouille_b

`----

Pour fusionner une branche (merging) :

,----

| git checkout testouille_b

| git merge --squash *ID du commit à merger*

| git commit git svn dcommit

`----

Les tags

Pour figer votre développement et mettre à disposition une version utilisable, vous pouvez vous servir des tags.

Après avoir vérifié que vous êtes bien sur la branche /master/, vous pouvez créer votre tag qui se créera automatiquement sur le dépôt distant.

,----

| git svn tag -m "version 0.1" 0.1

`----

Quelques liens

Page de manuel de git-svn

git svn cheatsheet for git rebel in an svn workplace

gitsvn crash course