Pour vous permettre de travailler vous obtenez à présent une copie travail-moi du depot que vous allez pouvoir modifier : cp -a depot travail -moi

Documents pareils
Plan global Outils de développement et compilation. Ce que l on veut éviter. Plan. Git : gestion de code source et versionnement.

Le système de gestion de version Git et GitHub

NIMEGUE V3. Fiche technique 3.07 : Sauvegarde / Restauration manuelle

TP1 : Initiation à l algorithmique (1 séance)

Introduction à Linux (pour le HPC) «Linux 101» Présentation :

TP1 - Prise en main de l environnement Unix.

TD séances n 3 et n 4 Répertoires et Fichiers sous Unix

TP Bases de données réparties

Description pas à pas des différents processus d installation, configuration, saisie des résultats et export des données.

Procédure de sauvegarde - Cobian Backup

Exemple : vous voulez tester votre site en local avant de l uploader via FTP chez votre hébergeur externe.

Atelier individuel. Linux 101. Frédérick Lefebvre & Maxime Boissonneault frederick.lefebvre@calculquebec.ca U. Laval - Janv. 2014

Affectation standard Affectation modifiée (exemple)

TP 1 Prise en main de l environnement Unix

Premiers Pas en Programmation Objet : les Classes et les Objets

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Ce document décrit la démarche à suivre pour installer les outils de développement et compiler le projet TANAGRA.

Unix/Linux I. 1 ere année DUT. Université marne la vallée

INSTALLATION ET CONFIGURATION D'UN SERVEUR WEB SUR MAC OS X

Bases Java - Eclipse / Netbeans

COMPTAPL V2 sur clé USB 2

Déployer des applications Perl

Transférer une licence AutoCAD monoposte

TP 4 de familiarisation avec Unix

LOSLIER Mathieu. Filière Informatique et Réseau 1 ère année. TP DNS. Responsable : LOHIER Stephane. Chargé de TD : QUIDELLEUR Aurélie

1 Démarrage de Marionnet

Pharmed. gestion de pharmacie hospitalière. Installation / déploiement

ACCÉLÉREZ VOTRE BOUTIQUE AVEC UN HÉBERGEMENT E-COMMERCE 100% PRESTASHOP & MAGENTO

But de cette présentation. Proxy filtrant avec Squid et SquidGuard. Serveur proxy. Serveur proxy. Hainaut P

Manuel d utilisation de la plate-forme de gestion de parc UCOPIA. La mobilité à la hauteur des exigences professionnelles

GUIDE DE PAIEMENT. Pour Bien Effectuer votre Paiement, veuillez suivre les instructions suivantes :

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

Introduction à Eclipse

Comment créer un diagramme de Gantt avec OpenOffice.org

Encryptions, compression et partitionnement des données

SQUID Configuration et administration d un proxy

Tutoriel Atout Facture. 14/01/2015 Codelpi

C.M. 1 & 2 : Prise en main de Linux

Tutoriel Création d une source Cydia et compilation des packages sous Linux

Utilisation de l outil lié à MBKSTR 9

Les systèmes de gestion de version

Module Communication - Messagerie V6. Infostance. Messagerie

Sauvegarde et Restauration d un environnement SAS

DITA XML Olivier Carrère -

Eteindre. les. lumières MATH EN JEAN Mme BACHOC. Elèves de seconde, première et terminale scientifiques :

Techniques d interaction dans la visualisation de l information Séminaire DIVA

Sage Déclarations Sociales

«Astrophysique et instrumentations associées» Cours UNIX Benoît Semelin

TRACER LE GRAPHE D'UNE FONCTION

FEN FICHE EMPLOIS NUISANCES

Licence Sciences et Technologies Examen janvier 2010

Gateway4Cloud Conditions Spécifiques

Mise en place d un proxy Squid avec authentification Active Directory

Fonctions homographiques

1 Lecture de fichiers

Contacts. Mode de communication : LSF, écrit / oral français. contact régions Lorraine / Alsace et régions proches

Sécurisation de Windows NT 4.0. et Windows 2000

Auto réparation des postes de travail Comprendre et déployer les mises à jours de TSC avec OfficeScan Corporate 5.5

Modes Opératoires WinTrans Mai 13 ~ 1 ~

Connectez-vous sur indiquez votre identifiant et votre mot de passe, puis cliquez sur Connexion.

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

III- Raisonnement par récurrence

Outils pour la pratique

Serveur de sauvegardes incrémental

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Plan du cours. Historique du langage Nouveautés de Java 7

Prérequis. Résolution des problèmes WMI. Date 03/30/2010 Version 1.0 Référence 001 Auteur Antoine CRUE

Aide-Mémoire unix. 9 février 2009

TP WINDOWS 2008 SERVER - OUTILS DE SAUVEGARDE ET DE RESTAURATION

Tutoriel Sage One Edition Expert-Comptable. - Le cabinet d Expertise-Comptable doit appeler le Service Client Sage One au

MODE OPERATOIRE CIEL GESTION COMMERCIALE VERSION EVOLUTION BTS PME PMI

_ PARAMETRE DU COMPTE _ ACCEUIL. 1 ere Etape «Créer un compte principal» Créer un compte secondaire. Ouvrir un compte principal

TP Service HTTP Serveur Apache Linux Debian

La mémoire. Un ordinateur. L'octet. Le bit

Les transactions 1/46. I même en cas de panne logicielle ou matérielle. I Concept de transaction. I Gestion de la concurrence : les solutions

LES FONCTIONS DE SURVEILLANCE DES FICHIERS

Programmation C. Apprendre à développer des programmes simples dans le langage C

Création dynamique des répertoires WORK et SASUSER des utilisateurs

Comment consulter les e- books à l Université de Lorraine?

NOTICE D UTILISATION SIEMENS

Note : Ce tutoriel a été réalisé sur GNU/Linux (Ubuntu) avec un serveur LAMP installé en local.

Documentation technique OpenVPN

INTERCONNEXION ENT / BCDI / E - SIDOC

Année Universitaire ère année de Master Droit Mention Droit Privé 1 er semestre. 1 er SEMESTRE 8 matières CM TD COEFF ECTS.

Gestion d identités PSL Exploitation IdP Authentic

La magie de SVN. Découverte & usage du logiciel

Guide rapide IDEP. Helpdesk

Accès distant Freebox v6 Configuration

Sondage sur la volonté d améliorer la gouvernance

Espace pro. Installation des composants avec Firefox. Pour. Windows XP Vista en 32 et 64 bits Windows 7 en 32 et 64 bits

Documentation utilisateur "OK-MARCHE" Historique des modifications. 3.0 Mise à jour complète suite à version OK-MARCHE V2.2. de marchés publics

Livret du Stagiaire en Informatique

OCS Inventory & GLPI

Eole - gestion des dictionnaires personnalisés

INTERCONNEXION ENT / BCDI / E - SIDOC

Autorité de certification

TUTORIEL Qualit Eval. Introduction :

THEME : CLES DE CONTROLE. Division euclidienne

Effectuer une sauvegarde avec Nero BackItUp

Sync-A-BOX et Duplicati. est une plateforme Cloud pour stocker et gérer vos données en ligne.

Transcription:

TD OMGL/VCS n 1 Diff, Patch, Merge IUT Orléans 1ère année Pour ce TD, vous travaillerez dans le répertoire ~/1A-OMGL-VCS/TD1. Définissons une variable bash TD1 pour y faire référence : export TD1= $HOME/1A- OMGL - VCS/ TD1 il faut ensuite créer ce répertoire et s y rendre : mkdir -p $TD1 Imaginons que vous développez un logiciel. Créez un répertoire depot dans lequel vous placez le premier fichier de votre projet : ce fichier nommé salut.c contient le code suivant : Pour vous permettre de travailler vous obtenez à présent une copie travail-moi du depot que vous allez pouvoir modifier : cp -a depot travail -moi Exercice 1. Simple diff. Le code ci-dessus est buggé car il devrait retourner un entier : le status d exécution du programme (0 en cas de succès, et par exemple 1 en cas d erreur). Effectuez maintenant la modification suivante dans le fichier travail-moi/salut.c : Nous supposerons que votre répertoire courant est à présent travail-moi, c est à dire votre répertoire de travail. Nous allons à présent étudier le delta entre../depot/salut.c et salut.c. Celui-ci peut être calculé de différentes manières grâce à diff. Etudiez et discutez les résultats des invocations suivantes : diff../depot/salut.c salut.c diff -c../depot/salut.c salut.c diff -u../depot/salut.c salut.c Vous trouverez la version PDF de la page de manuel en français pour diff dans le répertoire /pub/1a/vcs. 1

Exercice 2. Simple patch. Retournons dans le répertoire parent $TD1 (dont depot et travail-moi sont tous deux des sousrépertoires) et sauvons le delta dans un fichier : diff -u depot/ salut.c travail -moi/ salut.c > patch.1 Obtenons maintenant une nouvelle copie du depot que nous appellerons travail-lui : cp -a depot travail -lui Nous allons transférer dans travail-lui les modifications faites dans travail-moi et sauvegardées dans patch.1. cd travail -lui patch <../ patch.1 Nous pouvons vérifier que nous avons à présent dans travail-lui la même chose que dans travail-moi : diff salut.c../ travail -moi/ salut.c Vous trouverez la version PDF de la page de manuel en français pour patch dans le répertoire /pub/1a/vcs. Exercice 3. patch inversé. Nous pouvons également appliquer un patch en sens inverse pour en annuler les effets : patch -R <../ patch.1 On peut évidemment combiner les invocations de diff et patch. Par exemple, pour réappliquer les modifications effectuées dans moi : diff -u../ depot/ salut.c../ travail -moi/ salut.c patch et pour les réannuler : diff -u../ depot/ salut.c../ travail -moi/ salut.c patch -R Exercice 4. Patches en cascade. Retournons à présent dans le répertoire travail-moi. Nous sauvegardons d abord notre travail dans depot (une sorte de commit) : /travail -moi cp salut.c../ depot/ et modifions le programme de la manière suivante : 2

Nous pouvons calculer un nouveau delta par rapport à la version précédente : diff -u../ depot/ salut.c salut.c Procédons comme précedemment pour sauvegarder ce delta : diff -u depot/ salut.c travail -moi/ salut.c > patch.2 Puis retournons dans travail-lui et appliquons nos deux deltas l un après l autre : cd travail -lui patch <../ patch.1 patch <../ patch.2 Pour annuler ces effets il faut appliquer les deux deltas inversés mais dans l ordre opposé : patch -R <../ patch.2 patch -R <../ patch.1 Exercice 5. Diff récursif. Retournons dans travail-moi et créons un sous répertoire lib dans lequel nous aurons le fichier msg.c contenant le code ci-dessous : void msg() Allons maintenant dans le répertoire travail-lui pour y créer aussi un sous répertoire lib contenant le fichier msg.c avec le code ci-dessous : void msg() printf("bonjour\n"); Maintenant retournons dans le répertoire $TD1 parent de travail-moi et travail-lui, et invoquons la commande suivante : 3

diff -u -r travail -moi travail -lui > patch.3 Le résultat contient 2 hunks : le premier concerne le fichier lib/msg.c et le second le fichier salut.c. Voici donc un delta impliquant plusieurs fichiers et répertoires dans un projet. Exercice 6. Patch récursif. Nous pouvons appliquer ce patch au répertoire travail-moi pour qu il devienne exactement comme le répertoire travail-lui. Première tentative : patch --dry -run < patch.3 --dry-run permet d exécuter la commande sans réellement changer quoique ce soit : ceci permet de voir ce qui se passerait, mais en toute sécurité, sans rien changer. Dans le cas présent, patch nous demande quels fichiers modifier (le responsable de TD doit expliquer). La solution est d utiliser l option -p (voir la page de manuel) : patch -p0 < patch.3 Après quoi on peut vérifier que travail-moi est identique à travail-lui : diff -r travail -moi travail -lui On peut également annuler l application du patch de la manière suivante : patch -p0 -R < patch.3 Exercice 7. Diff récursif et fichiers nouveaux/manquants. Nous somme dans le répertoire $TD1. Créons deux nouveaux fichiers : echo untel > travail-moi/qui echo la > travail-lui/ou Considérez (et expliquez) la différence entre : diff -ur travail-moi travail-lui diff -urn travail-moi travail-lui Exercice 8. Fusion simple. Il faudrait illustrer si possible l usage des applications kdiff3 (excellent), kompare (très joli, mais ne supporte la fonctionalité de merge), meld, vimdiff, diff3, sdiff, ediff (dans GNU Emacs). Nous sommes toujours dans le répertoire $TD1. Faisons en sorte que depot et travail-lui soient des copies de travail-moi : rm -rf depot travail-lui cp -a travail-moi depot cp -a travail-moi travail-lui 4

Nous pouvons maintenant faire comme si travail-moi et travail-lui avaient obtenu une copie du même depot. Supposons que travail-moi modifie le fichier salut.c de la manière suivante : /* * un commentaire inutile */ et que de son coté travail-lui ajoute un fflush tout aussi inutile : fflush(stdout); On constate que : diff -u travail -moi/ salut.c travail -lui/ salut.c ne nous permet pas de fusionner les modifications de travail-moi et travail-lui (discuter pourquoi). Pour connaitre les modifications effectuées par chacun, il faut comparer à la version originale disponible dans depot : diff -u depot/ salut.c travail -moi/ salut.c > patch.moi diff -u depot/ salut.c travail -lui/ salut.c > patch.lui on pourrait alors appliquer patch.moi à travail-lui et patch.lui à travail-moi. C est bien compliqué! il existe un utilitaire, diff3, qui aide à effectuer cette fusion : diff3 -m travail -moi/ salut.c depot/ salut.c travail -lui/ salut.c Dans le cas présent, les modifications de chacun sont bien séparées et diff3 est capable de les fusionner directement (un antislash apparaissant comme dernier caractère d une ligne indique à bash que la ligne n est pas vraiment terminée : elle continue en fait sur la ligne suivante. J utilise cette notation ici parce que la commande est trop longue pour tenir sur une seule ligne de cette page) : diff3 -m travail -moi/ salut.c \ depot/salut.c \ travail -lui/ salut.c \ > salut.c 5

mv salut.c depot/ cp depot/ salut.c travail -moi/ cp depot/ salut.c travail -lui/ Attention de ne pas rediriger directement dans depot/salut.c car le fichier serait alors simultanément lu et écrit (danger!). Exercice 9. Fusion avec conflits. Supposons que travail-moi modifie salut.c de la manière suivante (il enlève 2 lignes de code) : /* * un commentaire inutile */ et que travail-lui ajoute 2 lignes de code : /* * un commentaire inutile */ fflush(stdout); printf("bye\n"); fflush(stdout); Expliquer pourquoi le transfert de modif ci-dessous de travail-lui vers travail-moi échoue : /travail -moi diff -u../ depot/ salut.c../ travail -lui/ salut.c patch --dry -run Voyons à présent ce que diff3 donne : diff3 -m travail -moi/ salut.c depot/ salut.c travail -lui/ salut.c (discuter le résultat). Si kdiff3 est disponible essayez : 6

kdiff3 -m depot/ salut.c travail -moi/ salut.c travail -lui/ salut.c \ -- auto -o $TD1/ nouveau - salut.c kdiff3 est parfois capable de résoudre les conflits automatiquement de manière heuristique : il est clair ici, en comparant à la version originale dans depot, que travail-moi a effacé 2 lignes de code et que travail-lui a ajouté 2 lignes de code après celles effacées par travail-moi. Les 2 modifications sont donc indépendantes et dans ce cas on peut donc faire les deux. C est ce que kdiff3 choisit de faire. On peut également invoquer kdiff3 de sorte qu il nous donne une interface graphique dans laquelle on peut explicitement résoudre les conflits à la main : kdiff3 -m depot/ salut.c travail -moi/ salut.c travail -lui/ salut.c \ -o $TD1/nouveau - salut.c 7