Carnet Wiki

git to svn to git

SPIP-Contrib :: Carnet Wiki :: Recherche :

git to svn to git

cf https://gist.github.com/bystrano/5755464

###########################################################
## Création d'un nouveau plugin sur la zone ###############
###########################################################

# On commence par récupérer les plugins de la zone, mais sans prendre le contenu des dossiers
svn checkout --depth=immediates svn://zone.spip.org/spip-zone/_plugins_

# On crée ensuite son plugin et un trunk
cd _plugins_
mkdir mon_plug
mkdir mon_plug/trunk

# puis on le commit
svn add mon_plug
svn add mon_plug/trunk
svn commit -m "ajout du nouveau plugin mon_plug"

# On peut ensuite effacer tout ça, pour la suite on bossera avec git svn

############################################################
## importer un dépôt git existant dans la zone #############
############################################################

# On crée le dossier du plugin sur la zone comme ci-dessus,
# puis on clone ce dossier en local

# l'option -s à la fin est utile si le dépôt SVN a la structure trunk branches tags
git svn clone --prefix=origin/ svn://zone.spip.org/spip-zone/_plugins_/mon_plug -s

# On crée une branche temporaire
git branch svn

# On importe le dépôt git existant (p.ex ici sur github
git remote add github git@github.com:mon_compte_github/mon_plug.git
git pull github master

# Puis on passe tous ces commits git au-dessus du premier commit svn
git rebase svn

# On peut alors effacer la branche temporaire…
git branch -d svn


############################################################
## Travailler sur un plugin existant déjà sur la zone ######
############################################################

# on clone le projet à l'endroit souhaité
# l'option -s à la fin est utile si le dépôt SVN a la structure trunk branches tags
git svn clone --prefix=origin/ svn://zone.spip.org/spip-zone/_plugins_/mon_plug -s

# le mieux est ensuite de se créer une branche locale
git branch local
# et de travailler sur cette branche
git checkout local

# Pour récupérer les nouveautés sur la Zone,
# on repasse sur la branche principale
git checkout master
# et on chope les nouveautés
git svn rebase
# qu'on merge ensuite sur la branche locale
git checkout local
git merge master

# Pour publier ses modifs, on commence par récupérer les
# nouveautés comme ci-dessus…
# Puis on merge la branche locale sur le master
git checkout master
git merge local
# Et on envoie nos commits sur le SVN, chaque commit git va
# créer un commit svn correspondant
git svn dcommit

# On peut ensuite travailler normalement avec git, sauf qu'au lieu de faire des
# "git push", on fera
git svn dcommit