Mon voyage

de SVN à Git

Olivier Jourdan <olivier.jourdan@wovalab.com>

Agenda

  1. Pourquoi ce voyage ?

  2. Mon carnet de voyage

  3. Aujourd’hui

  4. Mes conseils

Partie I

Les raisons du voyage

Rappel à propos des Systèmes de Contrôle de Version

  • Enregistrer les modifications des fichiers au cours du temps

  • Permettre de récupérer n’importe quelle version d’un fichier

  • Permettre de savoir qui a fait quel changement sur quel fichier

  • Permettre de partager des fichiers entre plusieurs personnes

doit-être utilisé même si vous travaillez seul!
ce n’est pas un système de backup

Rappel des spécificités de LabVIEW

  • vi et ctl sont des fichiers binaires

  • lvproj, lvlib, lvclass sont des fichiers XML

On ne merge jamais le contenu d’un fichier (même les fichiers XML). En cas de conflit, on choisit l’un ou l’autre des fichiers.

Pourquoi migrer de SVN à Git ?

  • Critères objectifs

    • Des fonctionnalités différentes de SVN

    • L’intégration à de nombreux services en ligne (GitLab, GitHub…​)

    • L’intégration aux systèmes d’intégration continue

  • Critères subjectifs

    • Ma curiosité

    • Tendance à migrer vers Git pour un assez grand nombre de développeurs

Which version control do you mostly use with LabVIEW?

Sondage réalisé au printemps 2020 - 83 participants

What do you plan to do?

Sondage réalisé au printemps 2020 - 83 participants

Y avait-il des risques ?

Git is awesome

Git est plus complexe que SVN

Git ne gère pas correctement les fichiers binaires

Git nécessite l’utilisation de ligne de commande

Git nécessite de faire des merges

Guides de voyage

Partie II

Mon carnet de voyage

Centralisé versus Distribué

  • SVN et Git diffèrent dans leur architecture

  • Les impacts peuvent être conséquents

Architecture centralisée

Centralized VCS architecture

Architecture distribuée

Distributed VCS architecture

Comparaison

Centralized vs Distributed VCS architecture

Protocole de communication

  • Encouragement à utiliser SSH

    • plus sécurisé

    • n’utilise pas de mot de passe

    • peut être plus complexe à configurer

NOTE:il est possible d’utiliser HTTPS

Changer mes habitudes

SVNGit

Checkout

Clone (repository)
Checkout (commit/branche spécifique)

Update

Pull

Commit

Stage
Commit (local)
Push (remote)

Externals

Submodules

Découvrir de nouvelles fonctionnalités

  • Amend

  • Stash

Rebase / Cherry pick / Bissect

Travailler avec les branches

Git repose sur le mécanisme de branche

  • Création, merge, switch, suppression sont des actions très simples

  • Permet de définir des rôles à certaines branches (fonctionnalités, correctifs, prototypes…​)

Trouver son workflow

  • Git est un système très ouvert

  • Définir un workflow est très important

Which version control do you mostly use with LabVIEW?

Sondage réalisé au printemps 2020 - 83 participants

Centralized

Centralized

Feature branche

Feature Branch

Git Flow

Git Flow

Pull/Merge request

  • Surcouche a Git

  • Permet de déléguer la responsabilité du merge à un tiers

Merge Request

Forking

Fork

Trouver le bon outil

Tortoise Git

Gratuit

SourceTree

Gratuit

Tower

Payant (abonnement annuel)

Fork

Payant (licence perpetuelle)

GitKraken

Payant (abonnement annuel)

Pas testé

Interface de Fork

Fork

Partie III

Aujourd’hui…​

Progression

  • Réflexion avancée et remise en question sur l’usage d’un outil de versionning

Adoption

  • Utilisation de Git pour tous les projets LabVIEW

  • Utilisation de Fork comme interface à Git

  • Utilisation de Git Flow comme workflow principal

Ouverture

Partie IV

Mes conseils de voyage

Comprendre les implications du système distribué

  • Commit (local) vs Push (publication)

  • Modification de l’historique

Choisir son workflow

Trouver le workflow qui convient à votre contexte

Quelques pistes

  • Vous voulez rester très proche de SVN → Centralized

  • Vous avez un process de release basé sur le Semantic Versioning → Git Flow

  • Vous travaillez sur des projets open-sources ou dans une très grosse équipe de développement → Fork / Merge Request

Commiter "proprement"

Detach Head

Perte d’information possible

Avoir une architecture modulaire

Quel que soit votre Sytème de Contrôle de Version, une architecture modulaire est indispensable pour pouvoir travailler en équipe sur un même projet.

Communiquer

Aucun Sytème de Contrôle de Version ne remplace la communication au sein d’une équipe de développement.

Conclusion

  • Le passage à Git requiert un effort d’apprentissage

  • Tout ce qui est fait avec SVN peut être fait avec Git

  • Git s’adapte à votre contexte et donne accès à beaucoup de services connexes

Partez avec un guide !

Questions ?

Merci pour votre attention.