Migration SVN vers Git
J’utilise de plus en plus Git en lieu et place de SVN et pour ce faire j’ai du migrer plusieurs de mes projets. Voici la marche à suivre que j’utilise :
Créer un répertoire de travail :
cd ~
mkdir GitMigration
cd gitMigration
Créer un fichier « users.txt » afin de convertir les utilisateurs SVN vers Git :
vi users.txt
# yann = Yann Lugrin
# dhh = David Heinemeier Hansson
# ...
#
Cloner le dépôt SVN (ce code part du principe que vous respecter la convention trunk/branches/tags dans SVN, si vous utiliser des nom différents ou simplement avec des majuscule, adapter la première ligne de code) :
git svn clone --prefix=svn/ --no-metadata -A ~/GitMigration/users.txt -T trunk -b branches -t tags http://URL-TO/SVN/PROJECT-NAME PROJECT-NAME
cd PROJECT-NAME
git reset --hard svn/trunk
Vérifier la liste des branches :
git branch -r
# origin/master
# svn/trunk
# svn/your-first-branch
# svn/another-branch
# svn/tags/your-first-tag
Faire un checkout des branches :
git checkout -b YOUR-FIRST-BRANCH YOUR-FIRST-BRANCH
git checkout -b YOUR-SECOND-BRANCH YOUR-SECOND-BRANCH
Puis créer les tags (il faut créer une branche depuis le tag SVN, la tagger, puis détruire la branche) :
git checkout -b tags/YOUR-FIRST-TAG tags/YOUR-FIRST-TAG
git tag tags/YOUR-FIRST-TAG
git checkout -b tags/YOUR-SECOND-TAG tags/YOUR-SECOND-TAG
git tag tags/YOUR-SECOND-TAG
git checkout master
git branch -D tags/YOUR-FIRST-TAG
git branch -D tags/YOUR-SECOND-TAG
Voilà la migration est complète, vous pouvez maintenant ajouter un remote (GitHub par exemple) et y faire un push (sans oublier les tags) :
git remote add origin git@github.com:GITHUB_USERNAME/REPO_NAME.git
git push --all
git push --tags
Faire le ménage dans sa Gentoo
Le temps passe est ma Gentoo s’encrasse ; à force d’installer des logiciels pour les supprimer aussi tôt après les avoir essayés on se retrouve avec un grand nombre de dépendances orphelines ; à chaque mise à jour le répertoire distfiles grossis ; on fini par avoir des slots inutiles mais dont portage ne se souciera pas.
Il est donc utile de faire le ménage de temps en temps, pour commencer ce n’est pas une mauvaise idée de jeter un œil à son fichier world et de désinstaller les logiciels dont on a pas besoin (dans le doute il vaut toujours mieux en laisser trop que pas assez) :
$ cat /var/lib/portage/world $ emerge -Cav package-name
Pour la suite nous avons besoin de deux packages (gentoolkit et udept):
$ emerge -av app-portage/gentoolkit $ emerge -av app-portage/udept
Maintenant le but est de retiré du fichier world les packages qui ne sont que des dépendances. Attention tout de même, si un package est noté comme dépendance d’un autre mais qu’on en a de toute façon besoin il ne faut pas l’effacer. Il n’est pas bête de faire également un backup du fichier world, on ne sait jamais. On peut également en profiter pour mettre à jour ses USE flag afin de fignoler le tout.
$ cp /var/lib/portage/world /var/lib/portage/world.bak $ dep -pw
La commande dep va donner la liste des packages qui se trouvent dans le fichier world et qui font partie des dépendances d’autres ebuilds. Il faut maintenant effacer dans le fichiers ceux qui doivent être traiter comme des dépendances (mais laisser ceux que on désire garder même si ils sortent de la chaine de dépendance).
On peut maintenant supprimer toutes les dépendances inutiles (attention, le système peut rencontrer une certaine instabilité depuis maintenant et jusqu’à la fin des opérations qui vont suivre).
$ dep -as
La commande dep va proposer de désinstaller un certain nombre de packages, il est possible que certains ne doivent pas l’êtere, il suffit alors de les ajouter au fichier world avec la commande suivante :
$ emerge -v --noreplace package-name
Une fois qu’on est d’accord avec cette liste on peut laisser portage faire son travail (s’est ici qu’il peut arriver de supprimer des dépendances qui ne devraient pas l’être mais ceci sera réparé plus tard).
Il faut faire la même chose pour supprimer les slots inutiles :
$ dep -aP
Voilà, le ménage est fait mais il faut maintenant s’assurer que le système est complet et stable de la façon suivante :
$ emerge -uDNav world && revdep-rebuild
Ces deux commande vont recompiler des dépendances qui aurais malencontreusement été effacées, éventuellement mettre à jours les packages dont les USE flag ont changés et recompiler les binaires dont les dépendances envers des librairies auraient été brisées.
Pour terminer faire le ménage dans le répertoire distfiles avec la commande suivante :
$ eclean -d distfiles
Voici une Gentoo comme neuve, prête à repartir pour un tour.
Linux, gentoo, gentoolkit, howto, maintenance, portage, tips, udept
