Wiki des iiens

Piste: gitlab

Services_arise:gitlab

GitLab

ARiSE met à votre disposition un Gitlab sur git.iiens.net. Celui-ci vous permet de gérer vos projets privés ou publics, collaboratifs ou pas.

Fingerprints SSH

Voici les fingerprints du service SSH, pour une connexion sécurisée authentifiant le serveur :

2048 e0:d2:56:ee:f3:16:8c:2f:ff:b1:3a:a0:51:ac:da:90 (RSA)
256 44:53:95:40:9c:00:33:19:22:d8:06:52:e5:62:b6:63 (ECDSA)

Migration de ChiliProject

Comme vous le savez peut-être, Arise héberge un ChiliProject sur projets.iiens.net, avec un serveur SVN. ChiliProject n'étant plus maintenu que partiellement, il a été décidé de passer à GitLab, et donc Git. La suite de cette partie est dédiée à la migration des dépôts SVN vers Git. Elle est inspirée d'un tutoriel, avec les modifications à apporter pour que ça marche sur le GitLab.

Note : pour que cette procédure fonctionne au mieux, il faut que le dépôt SVN ait une structure standard dès le départ, à savoir les dossier branches, trunk et tags à la racine du dépôt. Sans ça, une partie des informations ne correspondront pas, notamment les branches et les tags.

Première étape : initialisation

Dans un premier temps, vous pouvez faire les deux premières parties du tutoriel, elles n'ont pas à être modifiées, à savoir :

svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors-transform.txt

Comme décrit dans le tutoriel, il faut changer les lignes du type

jwilkins = jwilkins <jwilkins>

en des lignes du type :

jwilkins = John Albin Wilkins <johnalbin@example.com>

Ensuite, vous pouvez cloner le dépôt SVN sous forme de dépôt Git à l'aide de git-svn :

git svn clone <URL du dépôt SVN> --no-metadata -A authors-transform.txt --stdlayout ~/temp

Si vous n'êtes pas sûr de l'URL de votre dépôt, vous pouvez la retrouver avec la commande svn info|grep '^URL:' à la racine de votre dépôt local SVN.

Le dépôt SVN de test n'ayant de pas propriété ignore, il est possible que vous ayez à suivre la partie 3 de ce tutoriel, mais il est aussi possible que git-svn le fasse pour vous maintenant. Cette partie transforme les propriétés svn:ignore en fichier .gitignore de la façon suivante :

cd ~/temp
git svn show-ignore > .gitignore
git add .gitignore
git commit -m 'Convert svn:ignore properties to .gitignore.'

Deuxième étape : création des tags

git-svn transforme les tags SVN en branches Git, ce qui n'est pas forcément génial pour nous. Du coup on va lister les différentes “branches de tags” et créer des vrais tags Git :

cd ~/temp
git for-each-ref --format='%(refname)' refs/remotes/origin/tags |
cut -d / -f 5 |
grep -v '@' |
while read ref
do
  git tag "$ref" "refs/remotes/origin/tags/$ref";
done

Troisième étape : on pousse !

Notre dépôt est presque prêt à être poussé sur GitLab. Avant ça, il faut bien sûr créer le projet GitLab, qui vous crée un dépôt en même temps que le projet, mais aussi faire quelques modifications :

cd ~/temp
git remote add gitlab git@git.iiens.net:poiral2042/nouveau_depot.git
git config remote.gitlab.push 'refs/remotes/*:refs/heads/*'
git push gitlab
git push gitlab --tags
git push gitlab master

Quatrième étape : nettoyage

Lorsqu'on lance un git branch -a , on a beaucoup trop de branches inutiles qui sont listées, on va donc en supprimer. Pour se faire, on va tout d'abord cloner le nouveau dépôt Git de GitLab :

cd ~
git clone git@git.iiens.net:poiral2042/nouveau_depot.git

Suppression des "branches-tags"

Comme on a déjà transformé les “branches-tags” SVN en tags Git, on peut les supprimer :

cd ~/nouveau_depot
git for-each-ref --format='%(refname)' refs/remotes/origin/tags |
cut -d / -f 5 |
while read ref
do
  REFNAME=`echo $ref | sed -e 's/^refs\/remotes\/origin\///'`;
  git push origin ":$REFNAME";
  (echo "$ref" | grep -q '@') && git push origin ":tags/$ref"
done

Suppression des "origin/origin" dans les refs

Vous noterez aussi sans doute la répétition de la remote “origin” dans les branches distantes listées par git branch -a. Comme c'est moche et inutile, on va aussi nettoyer tout ça :

cd ~/nouveau_depot
git for-each-ref refs/remotes/origin/origin/ | while read commit osef ref
do
  BRANCHNAME=`echo $ref | sed -e 's/^refs\/remotes\/origin\/origin\///'`;
  git branch $BRANCHNAME $commit;
  git push origin :origin/$BRANCHNAME;
  git push origin $BRANCHNAME;
  git branch -D $BRANCHNAME;
done

Suppression du trunk

Vous pouvez également vous passer de la branche trunk, devenue inutile avec la branche master.

git push origin :trunk

Il est possible que vous ayez des erreurs lorsque vous essayez de supprimer certaines branches : il vous faut alors aller dans les Settings de Gitlab, puis Protected Branches, et vous cliquez Unprotect là où il faut.

Finalisation

Normalement, votre dépôt est utilisable dans ~/nouveau_depot et vous n'avez plus besoin de ~/temp, vous pouvez donc le supprimer en toute confiance.

Il ne vous restera plus qu'à migrer les tickets et le wiki ChiliProject respectivement vers les issues et le wiki GitLab.