Intégrer Gogs à Jenkins

Gogs (Go Git Service) est une solution Git auto-hébergée codée en Go. Jenkins est un outil d’intégration continue programmé en Java. Ces deux projets à code source ouvert sont tous deux hébergés sur GitHub. Lorsque que combiné ensemble, ils permettent presque un cycle de développement logiciel complet.

Le type de projet à utiliser dans Jenkins est le Multibranch Pipeline car il est le mieux adapté à Git. C’est pourquoi que dans la section Branch Sources lorsque l’on clique sur Add source on doit choisir Git. Vous devez entrer le Project Repository, pour vous simplifier la tâche vous pouvez utiliser le bouton Copy de Gogs. Dans la section Behaviors, appuyez sur le bouton Add et choisissez l’option Configure Repository Browser. Dans la liste de Repository browser, il faut choisir gogs et entrer le URL de la page du projet. Cela fera en sorte qu’à plusieurs places dans Jenkins des liens vers Gogs seront ajoutés.

Liens vers Gogs
Le SHA1 sera un lien vers la soumission dans Gogs

Ceci conclut la première étape. La seconde consiste à pouvoir démarrer des tâches sur Jenkins suite à une soumission. Avant de quitter la page de configuration du projet, dans la section Scan Multibranch Pipeline Triggers on peut cocher l’option Periodically if not otherwise run. Cela va permettre une vérification du dépôt à tous les jours. C’est une protection au cas où Jenkins ou Gogs serait incapable d’effectuer la prochaine étape.

Dans Gogs il faut maintenant choisir votre dépôt et aller dans les Settings. Par la suite, on va dans la section Webhooks, on clique sur Add Webhook et on choisit Gogs.
Entrez ces paramètres:

  • Payload URL: http://jenkinsserver.com/git/notifyCommit?url=http://gogsserver.com/Org/Project.git
    • Org/Project.git = nom du dépôt utilisé dans Jenkins (sensible à la case)
  • Content Type: application/x-www-form-urlencoded
  • When should this webhook be triggered: Let me choose what I need.
  • Cocher les options suivantes:
    • Create
    • Delete
    • Push
  • Active doit être cocher

Pour terminer, appuyer sur le bouton Add Webhook.

Avec cette configuration les branches pourront être ajoutées et supprimées automatiquement dans Jenkins. Si vous avez un fichier Jenkinsfile inclus dans votre projet, les tâches ajoutées à celui-ci pourront être effectuées à chaque soumission. Malheureusement les requêtes de tirage (pull requests) ne fonctionnent pas.

Si vous avez besoin d’aide sur le plugin Git de Jenkins vous pouvez consulter cette page web.

Augmenter la sécurité d’un site web utilisant SSL

Dernièrement je me suis fais présenter l’outil SSL Server Test de SSL Labs. C’est une application en ligne qui permet de tester la sécurité d’une site web. J’avais récemment installé un certificat SSL sur le serveur d’un ami. Il s’agit d’un certificat généré gratuitement par Let’s Encrypt. Donc, je croyais bien obtenir une bonne note. Eh bien… non! J’ai obtenu la note de B.

Voici les deux problèmes qui me limitaient à cette cote.

  • This server supports weak Diffie-Hellman (DH) key exchange parameters. Grade capped to B.
  • This server accepts RC4 cipher, but only with older browsers. Grade capped to B.

Le site web est hébergé sur Windows Server 2012 R2. Donc les prochaines étapes pour régler ces problèmes de sécurité ont seulement été testées avec cette version de Windows. Si vous les appliquez, voici ce qui pourrait arriver:

Cote B vers A-
Cote B vers A-

A- ce n’est pas A ou même A+, mais c’est un bon départ.

Tous ces problèmes peuvent se régler dans l’Éditeur du Registre. On peut le démarrer avec la commande regedit.exe

Pour régler le problème avec Diffie-Hellman on doit aller dans la clef suivante:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SChannel\KeyExchangeAlgorithms
Si elle n’existe pas on doit créer la sous-clef Diffie-Hellman
Dans la clef Diffie-Hellman, on doit créer une valeur DWORD nommé Enabled dont la donnée est 0.

Maintenant passons à l’algorithme de chiffrement RC4 (Rivest Cipher 4) qui est désuet. On doit aller dans la clef suivante:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers
Il va ensuite falloir créer les trois sous-clefs suivantes: RC4 128/128, RC4 40/128 et RC4 56/128.
Pour chacune de ces clefs, on doit créer une valeur DWORD nommé Enabled dont la donnée est 0.

Registry Editor - SCHANNEL key
Éditeur du Registre – clef SCHANNEL

Vous pouvez maintenant fermer l’Éditeur du Registre et redémarrer votre serveur pour appliquer les modifications.

Si vous désirez annuler ces changements il suffit de mettre la valeur Enabled à 0xffffffff. Vous pouvez aussi simplement supprimer la valeur Enabled.

J’espère que cet article vous aidera à augmenter la sécurité de votre site en évitant d’exposer des méthodologies faibles ou insécures.

Utiliser Gogs comme un service Windows

Dans mon dernier article, j’avais expliqué comment démarrer MiNET comme un service Windows. On avait la chance que la fonctionnalité était intégrée à l’application. Par contre, ce n’est pas toujours le cas.

Cette fois-ci c’est l’application Gogs que j’aimerais utiliser comme service Windows. Gogs (Go Git Service) est une solution Git auto-hébergée codée en Go. Ce projet à code source ouvert hébergé sur GitHub a beaucoup de qualité, la plus grande étant sans doute sa facilité d’installation. Maintenant, il est temps de parler de l’un de ses défauts: il ne peut pas être installé nativement comme service Windows.

La documentation de Gogs nous dirige vers l’application NSSM pour palier à ce problème. NSSM (Non-Sucking Service Manager) se vante de ne pas être médiocre comme les autres outils de ce genre. L’application possède même une interface graphique pour installer, éditer ou supprimer un service créer à partir de NSSM. Par contre, dans cet article, c’est plutôt des lignes de commande que nous utiliserons.

En premier, il faut que le fichier app.ini de Gogs soit modifié pour que le paramètre RUN_USER porte le nom du PC. Pour connaitre le nom, vous pouvez utiliser la commande suivante:

echo %COMPUTERNAME%

Le fichier ini doit être modifié comme ceci:

RUN_USER = NOMDUPC$

Le signe de dollar à la fin du nom est important.

En second lieu, il faut s’assurer que NSSM a été installé dans votre %PATH%. Par exemple, le fichier nssm.exe peut être copié dans le dossier C:\WINDOWS\system32.

Ensuite, on ouvre une fenêtre de terminal et on tape toutes ces commandes:

set gogspath=c:\gogs
set escapepath=^%PATH^%
nssm install gogs "%gogspath%\gogs.exe"
nssm set gogs AppDirectory "%gogspath%"
nssm set gogs AppParameters "web"
nssm set gogs DisplayName "Gogs - Go Git Service"
nssm set gogs Description "A painless self-hosted Git service."
nssm set gogs Start SERVICE_DELAYED_AUTO_START
nssm set gogs AppStdout "%gogspath%\gogs.log"
nssm set gogs AppStderr "%gogspath%\gogs.log"
nssm set gogs AppRotateFiles 1
nssm set gogs AppRotateBytes 1000000
nssm set gogs AppEnvironmentExtra "PATH=%escapepath%;%gogspath%;C:\Program Files\Git\bin"
nssm start gogs

Il est important de changer la ligne 1 pour y inscrire le chemin vers l’application Gogs. La ligne 13 doit aussi être changée si Git n’est pas dans le %PATH%. La dernière ligne va démarrer le service, donc ouvrez un navigateur web et testez que tout fonctionne.

Si vous désirez supprimer le service, c’est cette commande qu’il faut utiliser:

nssm remove gogs

Pour éditer un service déjà installé avec l’interface on utilise cette commande:

nssm edit gogs

NSSM Details
Édition du service Gogs à l’aide de NSSM

En terminant, je veux vous parler de Gitea. Il s’agit d’un fork de Gogs qui semble avoir le vent dans les voiles. Pour l’instant, je préfère encore demeurer avec Gogs, mais je garde un œil attentif sur ce projet.

Utiliser MiNET comme un service Windows

Dans un article précédent j’avais parlé du serveur Minecraft MiNET. Le serveur est facile à démarrer, il suffit de double cliquer sur l’exécutable. Le problème c’est que je veux qu’il roule de façon continue sur mon serveur Windows 2012. Donc, il faut qu’il soit installé comme un service Windows. Cela va masquer la fenêtre de console et faire en sorte que l’application va démarrer même si aucun utilisateur n’est connecté.

Heureusement pour nous, MiNET utilise Topshelf, il s’agit d’une infrastructure logicielle permettant la conception de services Windows en utilisant .NET.

Pour obtenir de l’aide, rien de plus simple, on écrit ceci:

MiNET.Service.exe help

En ce qui a trait au service, voici les paramètres importants:

  • install
  • start
  • stop
  • uninstall

Les noms sont assez explicites et je crois qu’il ne demande pas vraiment d’explication. Donc, pour installer le service on tape ceci:

MiNET.Service.exe install

Les informations par défaut faisaient mon bonheur. Dans la capture d’écran suivante, on peut voir le résultat.

MiNET Service Properties
MiNET Service Properties

Il ne reste plus qu’à démarrer le service avec cette ligne de commande:

MiNET.Service.exe start
Minecraft

Amusez-vous bien à MineCraft en multi-joueurs.

Git: Réécrire l’histoire

Encore une fois je vais traiter de la modification des informations d’une soumission. Dernièrement j’ai encore migré plusieurs projets qui étaient sous Subversion vers Git. Donc j’ai dû faire appel à git filter-branch.

Ma première erreur a été de faire des soumissions sans changer le nom du committer / author. Heureusement mon adresse de courriel était la bonne. J’ai donc ouvert une fenêtre de Git Bash pour y coller ce code:

#!/bin/sh

git filter-branch --env-filter '
EMAIL="crayon@server.com"
CORRECT_NAME="Crayon"
if [ "$GIT_COMMITTER_EMAIL" = "$EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
fi
' --tag-name-filter cat -- --branches --tags

Si vous voulez l’utiliser il faut bien sûr changer les variables EMAIL et CORRECT_NAME pour y mettre vos informations. Si le CORRECT_NAME contient un guillemet simple, il faut le remplacer par '\'' pour pouvoir exécuter le code.

Mon deuxième problème est survenu suite à l’application de fichiers Patch. La date soumission était celle de l’application de la patch, mais je voulais que ce soit celle où l’auteur avait fait sa soumission. J’ai donc utilisé ce code:

#!/bin/sh

git filter-branch --env-filter '
if [ "$GIT_COMMITTER_DATE" != "$GIT_AUTHOR_DATE" ]
then
    export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"
fi
' --tag-name-filter cat -- --branches --tags

Voici la liste de variables d’environnement mises à votre disposition pour effectuer d’autres tâches:

  • GIT_AUTHOR_NAME
  • GIT_AUTHOR_EMAIL
  • GIT_AUTHOR_DATE
  • GIT_COMMITTER_NAME
  • GIT_COMMITTER_EMAIL
  • GIT_COMMITTER_DATE

Il est important de savoir que si vous roulez ces scripts, l’historique de votre dépôt va être réécrit. Toutes les personnes qui ont un fork ou un clone devront prendre cette nouvelle version.

Git: Modifier un message d’une soumission

Suite à une migration de Subversion vers Git, je me suis retrouvé avec des messages qui contiennent un « git-svn-id ». Oui, je sais, il suffisait d’ajouter le paramètre ‘–-no-metadata‘ à la commande ‘git svn’.

Voici un exemple de message que j’obtiens:

libpng updated to 1.4.5

git-svn-id: https://wii-tac-toe.googlecode.com/svn/trunk@104 bba1cac1-252d-79fd-420d-80adb1f9fa09

Heureusement il existe un moyen de changer le message. C’est l’utilisation du paramètre ‘filter-branch‘ qui nous aidera à effectuer cette tâche. La commande suivante va effacer la ligne du message.

git filter-branch --msg-filter '
    sed -e "/^git-svn-id:/d"
'

L’application sed va servir à faire la modification. On utilise le paramètre -e pour lui spécifier une expression. Le ‘/^’ veut dire que la ligne débute par « git-svn-id: ». Le ‘/d’ à fin signifie que la ligne sera supprimée si elle correspond à l’expression.

La migration a aussi ajouté un saut de ligne avant d’insérer le « git-svn-id ». Si vous êtes dans la même situation que moi et que vous n’avez pas vous-mêmes ajouté des sauts de ligne dans vos messages, alors c’est facile de supprimer tous les sauts de lignes en plus des lignes qui contiennent le « git-svn-id ». Voici la commande que j’ai utilisée.

In the end exercise should be fun and make you feel cheapest price for cialis good. All these kinds of medicinal help are taken under strict vardenafil levitra online instruction of your physician. Eventually, he leaves his female partner sexual unsatiated, leading to disharmony in relationship. levitra 10 mg davidfraymusic.com This makes it to work actively in about 30 minutes in order to enrage the size and strength of an muscle when she (or he) presses on cialis generika 10mg particular cranials or sutures; this can be named as male impotence, erection disorder, ED poor erection etc.
git filter-branch --msg-filter '
    sed -e "/^$/d;/^git-svn-id:/d"
'

L’expression ‘/^$/d’ supprime toutes les lignes vides.

Pour transférer les tags sur les nouvelles soumissions qui ont été créée, on peux utiliser le paramètre ‘--tag-name-filter‘ de la manière suivante:

git filter-branch --tag-name-filter cat --msg-filter '
    sed -e "/^$/d;/^git-svn-id:/d"
'

Il est important de savoir que si des tags existent déjà sur le serveur avec les mêmes noms, ils vont devoir être supprimés en premier.

Lorsque que vous devrez pousser les changements, il va falloir utiliser l’option ‘--force‘ sinon ça ne fonctionnera pas.

MiNET, un autre serveur Minecraft PE

Dans mon dernier article j’avais expliqué comment installer PocketMine. J’ai eu un peu de difficulté avec ce serveur pour Minecraft Pocket Edition. J’ai donc décidé de regarder pour une alternative. Mon regard s’est posé sur MiNET. Il s’agit d’un projet à code source ouvert disponible sur GitHub. Il est codé en C# et à pour but la performance lors de parties multi-joueurs.

Tout d’abord il faut télécharger l’archive qui contient tout ce dont on aura besoin. Il suffit d’extraire le fichier minet-server.zip sur votre disque dur.

Avant même de démarrer le serveur je vous conseille de modifier les configurations. Pour cela il faut éditer le fichier server.conf. Le fichier comporte une liste de clefs. Chaque clef possède un nom et une valeur délimités par le signe égal (=). Le nom apparait à gauche du signe égal. L’utilisation d’un carré (#) en début de ligne signifie qu’il s’agit d’un commentaire. Une ligne commentée ou vide sera simplement ignorée.

Voici les configurations pour tester le serveur:

MaxNumberOfPlayers=10
motd=Mon serveur
WorldProvider=flat


Par défaut, le nombre de joueurs maximum permis sur le serveur est à 1000. Mettre la propriété MaxNumberOfPlayers à dix me semble plus normal pour un serveur méconnu. motd signifie Message Of The Day, c’est le texte qui apparait en dessous du nom du serveur dans le jeu. Vous pouvez y inscrire ce que vous voulez. Un texte de moins de 20 caractères semble avoir du sens. Pour tester le serveur il est préférable de mettre WorldProvider à flat. Ceci aura comme effet d’utiliser un monde de test.

Maintenant vous pouvez double cliquer sur le fichier MiNET.Service.exe. MiNET est compilé avec Visual Studio et nécessite au minimum le Framework .NET version 4.6. Donc, si vous avez le message suivant, il faudra cliquer sur Oui pour effectuer l’installation:

.NET Framework 4.6.1 est requis
.NET Framework 4.6.1 est requis

Il se peut aussi que Windows bloque l’exécution de l’application. Alors il faudra aller dans les Propriétés du fichier .exe et de toutes les DLL pour les débloquer:

MiNET Unblock
MiNET Unblock

Maintenant vous devriez être capable de démarrer le serveur sans erreur et de vous balader dans le mode de test.

Pour jouer dans un autre monde alors il faut le télécharger et l’installer. Vous pouvez aller sur le site planetminecraft.com dans la section Projects pour y télécharger un projet. J’ai eu quelques problèmes avec certains mondes, alors il faut simplement laisser tomber et en prendre un autre. Il faut extraire l’archive et modifier la propriété PCWorldFolder pour y mettre le chemin vers le dossier où se trouve l’information. Il va aussi falloir modifier WorldProvider pour y mettre anvil:

WorldProvider=anvil
PCWorldFolder=.\Worlds\Monde1

En terminant voici d’autres propriétés intéressantes ainsi que leur valeurs potentielles:
GameMode

  • Survival
  • Creative
  • Adventure
  • Spectator

Difficulty

  • Easy
  • Normal
  • Hard
  • Peaceful

Installer un serveur Minecraft PE

Le but de cet article est de montrer comment installer un serveur Minecraft Pocket Edition sur Windows. Plus précisément, ce sera pour la version 0.15.0, la version la plus récente du jeu au moment d’écrire l’article. Le serveur qui sera utilisé se nomme PocketMine. Il s’agit d’un projet à code source ouvert disponible sur GitHub. Malheureusement la version disponible sur le site web est pour Minecraft 0.10.4 alpha. Ce n’est pas grave, car on va remplacer certains fichiers par ceux de la version en développement.

Tout d’abord il faut télécharger l’installateur de PocketMine-MP. Ensuite, il suffit de l’exécuter et de suivre les instructions. J’ai choisi comme dossier d’installation C:\PocketMine-MP.

Installateur de PocketMine
Installateur de PocketMine

La version stable 1.4.1 est maintenant installée, mais cette version ne fonctionne pas avec celle qui est installée sur mon iPad. Il faut télécharger la version la plus récente du fichier PocketMine-MP.phar. C’est sur la page Bintray de PocketMine que l’on va récupérer ce fichier. Il faut aller dans la section PocketMine-MP-phar et ensuite Files. On télécharge la version la plus récente, aujourd’hui c’est le PocketMine-MP_1.6dev-27_ef8227a0_API-2.0.0.phar. Il faut le renommer PocketMine-MP.phar pour qu’il remplace le fichier du même nom dans le dossier C:\PocketMine-MP. Les versions plus récentes du fichier .phar nécessitent d’avoir PHP 7.0, qui n’est pas la version incluse dans l’installateur. Sur le même site, on choisit la section Windows-PHP-Binaries et ensuite Files. Vous devez télécharger la version pour votre type de processeur. Si vous ne le savez pas, téléchargez la version x86 pour Windows 32-bit. Cette archive comporte les fichiers qui vont remplacer ceux dans C:\PocketMine-MP\bin\php.

Maintenant, tout devrait fonctionner, ou non… L’utilisation de PHP 7.0 nécessite Visual C++ Redistributable for Visual Studio 2015. Je m’en suis rendu compte avec ce message:

Le fichier VCRUNTIME140.dll est absent
Le fichier VCRUNTIME140.dll est absent

Maintenant c’est vrai, tout devrait fonctionner. Il suffit de double cliquer sur le fichier start.cmd dans le dossier C:\PocketMine-MP. À la première utilisation vous devrez choisir la langue et accepter la licence. Pour l’aide il suffit de taper la commande help. Pour la configuration je vous conseille d’aller lire la documentation.

Le restant de l’article est seulement nécessaire si tout comme moi vous avez installé le PocketMine sur un PC serveur. Il faut démarrer Windows Firewall With Advanced Security et aller dans la section Inbound Rules. Ensuite on clique sur New Rule pour ajouter une règle qui va permettre aux utilisateurs de se connecter au serveur qui tourne localement sur le PC.

Windows Firewall with Advanced Security
Windows Firewall with Advanced Security

À la première étape, on choisit Port et on clique sur le bouton Next.

New Inbound Rule Wizard Step 1
New Inbound Rule Wizard Step 1

À la deuxième étape, on choisit l’option UDP et on entre le port 19132. Ensuite on clique sur le bouton Next.

New Inbound Rule Wizard Step 2
New Inbound Rule Wizard Step 2

À la troisième étape, on sélectionne Allow the connection et on clique sur le bouton Next.

New Inbound Rule Wizard Step 3
New Inbound Rule Wizard Step 3

À la quatrième étape, gardez toutes les cases cochées et cliquez sur le bouton Next.

New Inbound Rule Wizard Step 4
New Inbound Rule Wizard Step 4

À l’étape finale, vous pouvez entrer le nom PocketMine-MP. La description est facultative. Ensuite on clique sur le bouton Finish.

New Inbound Rule Wizard Step 5
New Inbound Rule Wizard Step 5

Voilà, maintenant vous avez un serveur Minecraft sur lequel vous pouvez inviter tous vos amis.

Minecraft: Ajouter un serveur externe
Minecraft: Ajouter un serveur externe

Augmentez la puissance de vortre jouabilité!

Il n’y a pas d’erreur dans le titre de cet article. Je ne fais que citer Nintendo. Voici la photo de ma Wii U Gamepad qui nous montre cette erreur de frappe que Nintendo a laissé passer.

Augmentez la puissance de vortre jouabilité!
Augmentez la puissance de vortre jouabilité!

De plus, comme si ce n’était pas assez, le site web de Nintendo contient la même erreur:

amiibo de Nintendo

Migration de Subversion vers Git

Bonjour, il est facile de faire la migration de Subversion vers Git, car l’outil git svn nous simplifie la vie grandement.

La première étape est de bâtir une liste de correspondance entre les noms utilisés dans Subversion et ceux qui seront utilisés dans Git. Pour cela il faut créer un fichier que je nomme habituellement users.txt et y insérer les auteurs comme suit:

Crayon = Crayon2000 <crayon@serveur.com>
(no author) = Crayon2000 <crayon@serveur.com>

À gauche du symbole « égal », on retrouve le nom utilisé dans Subversion et à droite, c’est celui utilisé dans Git. Si une soumission a été faite sans auteur, il faut utiliser (no author) comme à la dernière ligne. J’avais eu ce problème avec Google Code car la première soumission était faite par le système pour créer la structure standard de dossier.

Une structure standard est la plus facile à cloner, elle ressemble à ceci:
SVN Standard Layout
Donc, il s’agit d’une structure de dossier qui contient les dossiers trunk, tags et branches dans le dossier racine. Pour cloner ce genre de structure, on utilise le paramètre –stdlayout comme ceci:

$ git svn clone https://wii-tac-toe.googlecode.com/svn/ \
    --authors-file=users.txt --stdlayout Wii-Tac-Toe

Cette commande simplifie la syntaxe, car on aurait aussi pu utiliser celle-ci:

$ git svn clone https://wii-tac-toe.googlecode.com/svn/ \
    -Ausers.txt --trunk=trunk --tags=tags --branches=branches Wii-Tac-Toe

Si vous clonez un dépôt local sur votre PC, il est important d’enlever le : après le lettre du disque. Donc à la place de file:///C:/repo il faut utiliser file:///C/repo

Les messages créés lors du clonage devraient ressembler à celui-ci:

libpng updated to 1.4.5

git-svn-id: https://wii-tac-toe.googlecode.com/svn/trunk@104 bba1cac1-252d-79fd-420d-80adb1f9fa09

Si vous désirez ne pas avoir la dernière ligne, alors il faut ajouter le paramètre –no-metadata à la ligne de commande.

Maintenant, voyons un autre type de structure que beaucoup de gens utilisent sous Subversion, il s’agit d’une structure dans laquelle les dossiers standards ont étés omis. Donc les fichiers sont enregistrés directement dans le dossier principal. Elle ressemble à ceci:
SVN Bad Layout
Pour cloner cette structure, on doit faire ceci:

$ git svn clone https://wii-tac-toe.googlecode.com/svn/ \
    --authors-file=users.txt Wii-Tac-Toe

Il est possible aussi qu’un projet ait été démarré dans une branche, alors la structure ressemble à celle-ci:
SVN Sub Branch Layout
Pour cloner cette structure, on doit faire ceci:

$ git svn clone https://wii-tac-toe.googlecode.com/svn/ -Ausers.txt  \
    --trunk=branches/Sub Wii-Tac-Toe

La prochaine structure peut aussi exister si vous avez créé un projet avec la structure standard à l’intérieur d’une branche. Cette structure serait similaire à celle-ci:
SVN Sub Branch With Standard Layout
Pour cloner cette structure on doit faire ceci:

$ git svn clone https://wii-tac-toe.googlecode.com/svn/ -Ausers.txt  \
    --trunk=branches/Sub/trunk --tags=branches/Sub/tags --branches=branches/Sub/branches Wii-Tac-Toe

Je sais que cette structure n’a rien de standard, mais il m’est arrivé de la faire lorsque je voulais tester une petite application en lien avec celle dans le dossier racine. Par la suite seulement on se rend compte qu’elle devrait être dans son propre dépôt, mais par paresse on ne le fait pas. Il faut prendre cette opportunité lors de la migration vers Git.

Tous les types de clonage que l’on a vus sont assez simples comparativement à celui qui vient. C’est un cas de « j’ai changé d’idée en cours de route ». Il ne s’agit pas d’une structure mais bien de deux. Ceci peut arriver dans les cas où des personnes ont débuté un projet sans la structure standard et qui par la suite ont réalisé que cela n’avait pas de sens. Concrètement, cela veut dire que quelques soumissions ont été faites avec une structure et que par la suite les dossiers trunk, tags et branches ont été créés. Les soumissions fautes dans le dossier de base ont bien sûr été déplacées dans le trunk. Lorsque l’on migre vers Git on ne veut pas perdre l’historique des soumissions qui précèdent la création des dossiers. Donc on cherche à garder le travail dans la structure de gauche et celle de droite:
SVN Bad Plus Standard Layout
Pour faire cela, nous allons procéder en deux étapes. La première pour aller chercher les soumissions de la première structure et la seconde pour le reste. Il existe peut-être une façon simple de faire, alors si vous la connaissez n’hésitez pas à laisser un commentaire à cet article.

Pour la première étape, on doit connaitre la soumission qui précède la création de la structure standard. Dans cet exemple, il s’agit de la soumission 38:

$ git svn clone https://wii-tac-toe.googlecode.com/svn/ -Ausers.txt \
    --revision=BASE:38 Wii-Tac-Toe
$ cd Wii-Tac-Toe
$ mv .git/refs/remotes/git-svn .git/refs/remotes/trunk

Pour la deuxième étape, on doit changer la configuration pour utiliser les dossiers de la structure de base. Il faut exécuter ces commandes:

$ git config svn-remote.svn.fetch trunk:refs/remotes/trunk
$ git config --add svn-remote.svn.branches branches/*:refs/remotes/*
$ git config --add svn-remote.svn.tags tags/*:refs/remotes/tags/*

Le fichier .git\config devrait maintenant contenir ces lignes:

	fetch = trunk:refs/remotes/trunk
	branches = branches/*:refs/remotes/*
	tags = tags/*:refs/remotes/tags/*

On va chercher les soumissions dans la structure standard:

$ git svn fetch --revision=BASE:HEAD --authors-file=../users.txt

Au lieu d’utiliser BASE on aurait pu mettre le numéro de la soumission où la structure standard a été créée.
Maintenant on rassemble le tout en mettant le trunk dans le master:

$ git checkout
$ git reset --hard refs/remotes/trunk

Je crois que cela fait le tour des différents types de clones que j’ai effectués jusqu’à maintenant. La tâche n’est pas complétée car il faut faire un peu de ménage et envoyer les données sur le serveur. Voici maintenant les étapes qui s’appliquent à tout ce que l’on a vu précédemment.

Ces lignes servent à aller dans le dossier, si vous n’y êtes pas déjà, et y faire un peu de ménage.

$ cd Wii-Tac-Toe
$ cp -Rf .git/refs/remotes/tags/* .git/refs/tags/
$ rm -Rf .git/refs/remotes/tags
$ cp -Rf .git/refs/remotes/* .git/refs/heads/
$ rm -Rf .git/refs/remotes
$ rm -f .git/refs/heads/trunk

On assigne l’origine:

$ git remote add origin https://github.com/Crayon2000/Wii-Tac-Toe.git

On pousse sur le serveur:

$ git push origin --all
$ git push origin --tags

Si jamais on avait déjà des soumissions et que l’on veut tout effacer et recommencer on peut faire ceci:

$ git push --force --set-upstream origin master
$ git push --force origin --tags

Attention ces commandes vont détruire tout votre historique existant.

Voilà, maintenant je crois que j’ai exposé toutes mes connaissances actuelles sur Git dans cet article. Bonne chance!

Liens intéressants:

No doubt https://energyhealingforeveryone.com/levitra-7845.html on line cialis those erection problems can happen due to various reasons and for some patients the side effects of these drugs may seen: Antacids: Antacids containing Aluminum and Magnesium are given but contraindicated in documented hypersensitivity, it can’t be safely used in pregnancy as it decreases effect of allopurinol, amprenavir, chloroquine, corticosteroids, diflunisal, digoxin, ethambutol, iron salt, H2 antagonists, isoniazid, penicillamine, phenothiazines, tetracycline, thyroid hormones. Its intake recovers the blood movement in penile area, making male reproductive section stronger. ordine cialis on line check By focusing on what you want and take consistent actions towards it, you’ll be able to end this problem in no time and no longer be troubled by levitra order prescription the question on how to stop premature ejaculation naturally. Nandrolone Decanoate is ideal as a pre-contest anabolic steroid, commonly stacked with Winstrol and with non-aromatizing agents like Halotestin and purchase cialis Trenbolone.