Version Control Systems (VCS) Examples avec Git (et subversion)

Description
en détail 1 Version Control Systems (VCS) Examples avec (et subversion) Document dérivé de la présentation SVN faite à l IUT de Villetaneuse et de l introduction à de Bart Trojanowski 29 mai 2013 Plan

Please download to get full document.

View again

of 49
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Information
Category:

Self-Help

Publish on:

Views: 24 | Pages: 49

Extension: PDF | Download: 0

Share
Transcript
en détail 1 Version Control Systems (VCS) Examples avec (et subversion) Document dérivé de la présentation SVN faite à l IUT de Villetaneuse et de l introduction à de Bart Trojanowski 29 mai 2013 Plan Les VCS centralisés en détail 2 1 Les VCS centralisés 2 3 en détail 4 en détail Travailler à plusieurs 3 fichier : Essai.java class Essai { int taille;... programmeur programmeur programmeur en détail Garder un historique 4 Savoir répondre aux questions Qui a modifié ce fichier? Qui a écrit cette ligne? Quelle était la version précédente de ce fichier? Quels fichiers avait-on le 12 juin 2007? en détail Des outils d aide au développement 5 Extensions indépendantes d un même code version stable/de développement développement de fonctionnalités indépendantes Intégration de développements multiples création/diffusion/intégration de patch fusion de différentes branches de développement en détail 1, 2, 3,..., plein de VCS 6 VCS centralisés (un seul dépôt) CVS historique, encore beaucoup utilisé remplaçant du précédent, mieux conçu multi-plateforme (Linux, MacOSX, Windows,... ) intégration avec les IDE (plugins pour Éclipse,... ) beaucoup utilisés (forges,... ) Mais aussi Codeville, Perforce (P4),... VCS décentralisés (plusieurs dépôts) libres, Mercurial (hg), Darc, Bazaar (bzr), GNU arch, Codeville, Monotone, SVK,... Propriétaires BitKeeper, Code Co-op,... Plan Les VCS centralisés en détail 7 1 Les VCS centralisés 2 3 en détail 4 en détail : dépôt et copie locale 8 réseau Dépot (Repository) lecture Copie locale fichier : Essai.java class Essai { int taille;... fichier : Essai.java class Essai { int taille;... écriture serveur programmeur en détail Concepts et opérations 9 dépôt lieu central (unique) avec tout l historique, format interne copie de travail répertoire de travail avec une version des fichiers (éventuellement modifiés localement) checkout récupération d une copie de travail depuis un dépôt update mise à jour de la copie de travail avec les nouvelles versions dans le dépôt. possibles avec les modifications locales. commit envoie des modifications locale sous forme d un commit dans le dépôt. Les VCS centralisés en détail 10 Apparition des conflits commit copie de travail pas à jour : update nécessaire update modifications locale et dans le dépôt : conflit à résoudre par le programmeur Unité de suivi : le fichier aucun problème (pour le SCM) si les fichiers modifiés sont différents La fusion automatique est possible si : il s agit d un fichier texte ET les modifications sont à des endroits éloignées les unes des autres (quelques lignes) Plan Les VCS centralisés en détail 11 1 Les VCS centralisés Présentation Exemple d utilisation 2 3 en détail 4 Subversion Les VCS centralisés en détail 12 Le dépôt contient toutes les versions (révisions) de tous les fichiers n est JAMAIS manipulé directement sauf pour le créer (évidemment) éventuellement pour changer les permissions est stocké sous forme non manipulable directement toute révision est associée à un auteur, un commentaire,... Copie de travail Une (au moins) par utilisateur Contient une révision particulière du dépôt avec éventuellement des modifications locales La commande svn permet de la manipuler en détail Les commandes principales 13 svnadmin create : créer un nouveau dépôt svn import : créer un nouveau répertoire/projet svn checkout : lire tout un projet svn update : lire/mettre à jour depuis le dépôt svn commit : écrire/modifier le dépôt (nouvelle révision) svn status : état de la copie locale svn add : ajouter un fichier svn rm : enlever un fichier svn help cmd : obtenir de l aide sur cmd Gérer le dépôt Les VCS centralisés en détail 14 Un seul dépôt pour plusieurs projets utiliser des répertoires différents pour séparer les projets URL pour le désigner file:///chemin/complet/vers/le/dépôt svn://host/chemin/relatif/au/serveur L URL peut désigner une sous-partie du dépôt (ie un projet particulier) Manipulations directes création : admin create répertoire permissions : qui a le droit d écrire dans ce dépôt (voir plus loin) en détail Créé un projet dans le dépôt 15 À utiliser une seule fois par projet svn import -m commentaires répertoire URL commentaires obligatoire, pour expliquer ce qui arrive dans le dépôts répertoire le répertoire local (existant) à importer URL l URL du dépôt en détail Récupérer une copie locale d un projet existant 16 À utiliser une seule fois par copie locale svn checkout URL [répertoire] URL l URL du dépôt répertoire répertoire dans lequel sera crée la copie locale (pas défaut, le dernier composant de l URL) en détail Mise à jour de la copie locale 17 À utiliser souvent svn update [fichier répertoire] par défaut agit sur le répertoire courant répertoire met à jour ce répertoire (et sous répertoires récursivement) fichier met à jour ce fichier uniquement comportement classique de beaucoup de commandes SVN en détail Écriture des modifications locales 18 À utiliser souvent svn commit -m correction... [fichier répertoire] commentaire obligatoire, expliquez vos modifications, soyez clairs : c est très utile Crée une nouvelle révision dans le dépôt en détail Autres commandes très utiles (1/2) 19 svn status [fichier répertoire] état de la copie locale (fichiers modifiés,... ) svn diff [fichier répertoire] différences entre l état actuel et la révision du dépôt (ie vos modifications non commitées) svn add fichier répertoire ajoute un fichier ou un répertoire svn rm fichier répertoire supprime un fichier ou un répertoire (on peut toujours retrouver les versions commitées avant) en détail Autres commandes très utiles (2/2) 20 svn mkdir répertoire crée un nouveau répertoire svn log [fichier répertoire] voir la liste des révisions avec les commentaires associés svn mv fichier répertoire fichier répertoire renomme un fichier ou un répertoire (sans perdre son historique) svn cp fichier fichier copie un fichier AVEC son historique en détail Exemple d utilisation 21 Dépôt lecture A lecture A Alice A Bob /projet]$ svn update U sources/compteur.java U sources/personnage.java U sources/essai.java U images/fond.png Updated to revision 124. /projet]$ U : fichier mis à jour en détail Exemple d utilisation 21 Dépôt A A A Alice Bob /projet]$ emacs sources/*.java /projet]$ /projet]$ emacs sources/*.java /projet]$ en détail Exemple d utilisation 21 Dépôt A A A Alice Bob /projet]$ svn status? sources/outilsson.java M sources/toto.java M sources/essai.java /projet]$? : fichier inconnu dans le dépôt M : fichier modifié dans la copie locale svn help status pour connaître tous les codes en détail Exemple d utilisation 21 Dépôt écriture A A A Alice Bob /projet]$ svn commit -m bug fix:.. Sending source/toto.java Sending source/essai.java Transmitting file data. Committed revision 125. /projet]$ en détail Exemple d utilisation 21 Dépôt A écriture X erreur: version pas à jour A A Alice Bob /projet]$ svn commit -m mon bug... Sending source/essai.java svn: Commit failed (details follow): svn: Out of date: source/essai.java in transaction /projet]$ en détail Exemple d utilisation 21 Dépôt A lecture A A +A Alice Bob /projet]$ svn update C sources/essai.java G source/toto.java Updated to revision 125. /projet]$ G : fusion automatique C : conflit à régler manuellement en détail Exemple d utilisation 21 Dépôt A A A* Alice Bob /projet]$ emacs sources/essai.java /projet]$ svn resolved sources/essai.java Resolved conflicted state of sources/essai.java /projet]$ La résolution des conflits est détaillée ensuite en détail Exemple d utilisation 21 Dépôt A* écriture A A* Alice Bob /projet]$ svn commit -m bug fix:.. Sending source/toto.java Sending source/essai.java Transmitting file data. Committed revision 126. /projet]$ en détail Exemple d utilisation 21 Dépôt lecture A* A* A* Alice Bob /projet]$ svn update U sources/toto.java U sources/essai.java Updated to revision 126. /projet]$ en détail Résolution des conflits (1/2) 22 Fichier avec conflit : Essai.java class Essai { .mine int taillexyz; ======= int tailleabc; .r125 String nom;... + trois fichiers créés Essai.java.r124 : version avant mes modifs Essai.java.r125 : version actuelle du dépôt Essai.java.mine : ma version (avant fusion) en détail Résolution des conflits (2/2) 23 1 éditer le fichier Essai.java en rectifiant 2 effacer les trois fichiers créés 3 commiter manuellement ou avec svn resolved file Plan Les VCS centralisés en détail L apport des VCS décentralisés Les opérations des VCS 24 1 Les VCS centralisés 2 L apport des VCS décentralisés Les opérations des VCS 3 en détail 4 en détail L apport des VCS décentralisés Les opérations des VCS Retour sur les composants des VCS 25 Composants des dépôts objects / blobs / diffs / deltas / patches commits / changesets / revisions ancestry / history tags / labels branches / heads Répertoire de travail fichiers liste de fichiers à ajouter/enlever en détail L apport des VCS décentralisés Les opérations des VCS 26 Les limitations des VCS centralisés impossible de commiter dans le TGV difficultés (sociales) pour obtenir les droits de commit diffusion immédiate de chaque modification commitée L apport des DVCS chaque copie contient tout l historique les commits sont locaux deux nouvelles opérations : clone duplication d un dépôt push/pull/fetch envoi/réception des nouvelles modifications d un dépôt vers/dans un autre en détail L apport des VCS décentralisés Les opérations des VCS Les opérations classiques des VCS centralisés 27 Checkout/Update crée le répertoire de travail obtient l état courant MAJ du répertoire de travail Commit regroupe les modifications envoie les modifications Diff/Log obtient les infos du serveur affichage (diff/objets/historique) en détail L apport des VCS décentralisés Les opérations des VCS Les opérations classiques des VCS décentralisés 27 Checkout/Update obtient l état courant MAJ du répertoire de travail Commit regroupe les modifications sauvegarde dans le dépôt Diff/Log obtient les infos du dépôt local affichage (diff/objets/historique) Clone création (dépôt et répertoire de travail) récupération de l historique Fetch/Pull Push transfert dépôt extérieur vers dépôt local parfois, MAJ rep de travail transfert dépôt local vers autre dépôt en détail Les atouts des DVCS L apport des VCS décentralisés Les opérations des VCS 28 micro-commits non intrusifs opérations déconnectées pas de point unique critique sauvegardes triviales à effectuer multiples branches de développement en parallèle naturellement Fusion des branches le point difficile pour les concepteurs de DVCS le système doit se souvenir de ce qu il a déjà inclus numérotation unique des changeset nécessaire en détail Histoire et fonctionnement interne Utilisation de GIT Petite histoire de la naissance de avril avril juin 2005 Linus utilise BitKeeper pour développer Linux BK s améliore (retour d expérience et de bugs) Le développement de Linux passe mieux à l échelle BitMover retire la licence gratuite de BK Linus écrits son propre VCS : est capable de faire des fusions est officiellement utilisé pour gérer Linux en détail Histoire et fonctionnement interne Utilisation de GIT Identification unique des objets avec SHA1 30 Un identifiant SHA1 peut désigner un fichier : contenu du fichier un répertoire : liste des identifiants SHA1 des fichiers/répertoires avec leurs métadonnées (mode,... ) un commit : répertoire + métadonnées (message, auteur,... ) + commit(s) parent(s) Monotone et Mercurial utilisent ce même principe. BitKeeper utilise des renumérotations des changesets. en détail Histoire et fonctionnement interne Utilisation de GIT Les trois entités pour le travail avec 31 Le dépôt (repository) L index contient l historique des commits, les tags et les branches (avec leur tête) contient les changements qui seront commitées au plus une nouvelle version d un fichier (sauf en cas de fusion) Le répertoire de travail la version de travail des fichiers Utilisation de GIT Les VCS centralisés en détail Histoire et fonctionnement interne Utilisation de GIT 32 Basics Creating a repository Creating commits Looking at the history Tagging & Branching Creating Merging Rebase Patches Generating Accepting Decentralized Cloning Fetch / Pull Push Daemon Remotes Tools Working with other SCMs Housekeeping Visualization Tricks Commands Les VCS centralisés en détail Histoire et fonctionnement interne Utilisation de GIT 33 format $ git options command cmd-options list of commands $ git help usage info $ git init -h usage: git init [-template=...] [-shared] detailed help $ git help init $ git init -help $ man git-init Configuration Les VCS centralisés en détail Histoire et fonctionnement interne Utilisation de GIT 34 global configuration is in $HOME/.gitconfig $ git config -global -list user.name=vincent Danjean color.branch=auto color.pager=true repository configuration is in repo/.git/config $ git config -list section.variable=value... initial settings $ git config -global user.name Vincent Danjean $ git config -global user. GUIs Les VCS centralisés en détail Histoire et fonctionnement interne Utilisation de GIT 35 Creating commits $ git gui $ gitg $ qgit $ git cola Managing branch and history $ gitk -all en détail Création d un dépôt sur une forge Histoire et fonctionnement interne Utilisation de GIT 36 Un dépôt créé par projet automatiquement (au plus) Sur navajo $ git-init-gforge Plate-formes dédiés à github https://github.com/ gitorious en détail et subversion Être raisonnable avec Conclusion Utiliser un dépôt subversion avec 37 + commits locaux, utilisations de branches - linéarisation des commits, un seul dépôt Bi-directionnal exchanges $ git-svn clone svn+ssh://host/project/trunk project $ cd project... work work work... $ git commit... $ git-svn fetch $ git-svn rebase $ git-svn dcommit en détail Passer de Subversion à et subversion Être raisonnable avec Conclusion 38 facile si on utilise un seul dépôt central (+ dépôts locaux) attention: après un commit, faire un push : modifs, commit, fetch, merge puis push Subversion : modifs, update, merge puis commit en détail Être raisonnable avec et subversion Être raisonnable avec Conclusion 39 : outil très puissant (réécriture historique, etc.) un peu comme root sur une machine unix d autres SCM distribués sont plus restrictifs (mercurial, etc.) Workflow et commits n impose rien (subversion un peu plus) workflow à définir avec ses collaborateurs peut servir à transférer des fichiers entre machine. Est-ce vraiment une bonne utilisation? Conclusion Les VCS centralisés en détail et subversion Être raisonnable avec Conclusion 40 De nombreux outils disponibles CVS (à éviter si possible), subversion : boîte à outil très puissante git-rebase, git-svn, git-bisect,... à utiliser avec ou sans modération mais aussi quilt (gestion de patches),... Outils bons ou mauvais : cela dépend de l utilisateur Les méta-données sont très importantes faire des commits logiques ils peuvent être nombreux et petits git permet de retravailler des commits (locaux) mettre un message de commit correct
Related Search
Similar documents
View more...
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks