{"id":140,"date":"2017-06-16T00:05:29","date_gmt":"2017-06-15T23:05:29","guid":{"rendered":"http:\/\/tutorialsdev.com\/?p=140"},"modified":"2017-06-16T00:05:29","modified_gmt":"2017-06-15T23:05:29","slug":"gestion-des-conflits-avec-git-et-tortoisegit","status":"publish","type":"post","link":"https:\/\/tutorialsdev.com\/index.php\/2017\/06\/16\/gestion-des-conflits-avec-git-et-tortoisegit\/","title":{"rendered":"Gestion des conflits avec Git et TortoiseGit"},"content":{"rendered":"<h1>Pr\u00e9-requis<\/h1>\n<ul>\n<li><a href=\"https:\/\/git-scm.com\/downloads\">Git<\/a> 2.13.0 (Git Bash et Git GUI)<\/li>\n<li><a href=\"https:\/\/maven.apache.org\/download.cgi\">Maven 3.x<\/a><\/li>\n<li><a href=\"https:\/\/tortoisegit.org\/download\/\">TortoiseGit 2.4.02<\/a><\/li>\n<\/ul>\n<p><iframe loading=\"lazy\" width=\"714\" height=\"402\" src=\"https:\/\/www.youtube.com\/embed\/AH7rOlmjP9k?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<h1>Contexte<\/h1>\n<p style=\"text-align:justify;\">Nous ne pouvons pas aborder le sujet des outils de gestion de versions (versioning) sans aborder la gestion de conflits. Au cours des d\u00e9veloppements c\u2019est une situation couramment rencontr\u00e9e. Plusieurs outils peuvent \u00eatre utilis\u00e9s pour g\u00e9rer cette situation notamment <a href=\"https:\/\/sourceforge.net\/projects\/kdiff3\/\">KDIFF3<\/a>, ce tutoriel mettra en \u0153uvre l\u2019utilisation de <a href=\"https:\/\/tortoisegit.org\/download\/\">TortoiseGit <\/a>. Comment aborder la gestion de conflits, cette \u00e9tape clef du d\u00e9veloppement \u00a0en \u00e9vitant certains pi\u00e8ges qui peuvent \u00a0nous mettre dans une situation inconfortable ? Nous allons r\u00e9pondre \u00e0 cette question en vous proposant une suite de commandes.<\/p>\n<h1><b>D\u00e9finir TortoiseGit comme outil de gestion des conflits<\/b><\/h1>\n<p style=\"text-align:justify;\">La d\u00e9finition de TortoiseGit \u00a0est assez simple \u00e0 mettre en \u0153uvre. Deux possibilit\u00e9s s\u2019offrent \u00e0 vous la mani\u00e8re &#8220;douce&#8221; en utilisant les lignes de commandes ci-dessous.<\/p>\n<pre><code>&gt; git config --global merge.tool tortoisemerge<\/code><code>\n&gt; git config --global mergetool.tortoisemerge.cmd '\"C:\/Program Files\/TortoiseGit\/bin\/TortoiseGitMerge.exe\" -base:\"$BASE\" -theirs:\"$REMOTE\" -mine:\"$LOCAL\" -merged:\"$MERGED\"'<\/code><\/pre>\n<p>La mani\u00e8re \u201cforte\u201d consiste \u00e0 \u00e9diter directement le fichier de configuration de Git localis\u00e9 dans : C:\\Users\\\\<b>.gitconfig<\/b>.<\/p>\n<pre><code>[merge]\n    tool = tortoisemerge\n[mergetool \"tortoisemerge\"]\n    cmd = \\\"C:\/Program Files\/TortoiseGit\/bin\/TortoiseGitMerge.exe\\\" -base:\\\"$BASE\\\" -theirs:\\\"$REMOTE\\\" -mine:\\\"$LOCAL\\\" -merged:\\\"$MERGED\\\"\n<\/code><\/pre>\n<h2><b>Point de d\u00e9part<\/b><\/h2>\n<p>La gestion d\u2019un conflit est issu du besoin d\u2019envoyer un d\u00e9veloppement r\u00e9alis\u00e9 \u00e0 partir d\u2019une branche locale vers la branche distante cible. Une fois le d\u00e9veloppement termin\u00e9 vous souhaitez synchroniser votre branche locale via les commandes <b>git pull rebase<\/b> et <b><a href=\"https:\/\/git-scm.com\/docs\/git-pull\">git pull<\/a><\/b>. comme vu dans \u00a0l\u2019article \u201c<a href=\"http:\/\/tutorialsdev.com\/2017\/04\/26\/debuter-un-developpement-avec-git\/\">D\u00e9marrer un d\u00e9veloppement avec Git<\/a>\u201d.<br \/>\n<figure id=\"attachment_201\" aria-describedby=\"caption-attachment-201\" style=\"width: 473px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-201\" src=\"http:\/\/tutorialsdev.com\/wp-content\/uploads\/2017\/06\/point-de-dc3a9part.png\" alt=\"Point de d\u00e9part\" width=\"473\" height=\"141\" srcset=\"https:\/\/tutorialsdev.com\/wp-content\/uploads\/2017\/06\/point-de-dc3a9part.png 473w, https:\/\/tutorialsdev.com\/wp-content\/uploads\/2017\/06\/point-de-dc3a9part-300x89.png 300w\" sizes=\"(max-width: 473px) 100vw, 473px\" \/><figcaption id=\"caption-attachment-201\" class=\"wp-caption-text\">Image du point de d\u00e9part sur la branche locale<\/figcaption><\/figure><\/p>\n<h2><b>R\u00e9soudre le conflit et v\u00e9rifier la compilation du projet<\/b><\/h2>\n<p style=\"text-align:justify;\">\u00c0 ce stade \u00a0vous \u00eates en phase de finalisation vos op\u00e9rations de fusion (merge) : vous avez arbitr\u00e9 le conflits en choisissant les versions \u00e0 conserver. La commande <a href=\"https:\/\/git-scm.com\/docs\/git-status\">git status<\/a>\u00a0 vous sugg\u00e8re de lancer la commande <a href=\"https:\/\/git-scm.com\/docs\/git-rebase\">git rebase &#8211;continue<\/a> afin de cl\u00f4turer la gestion de votre conflit. C\u2019est \u00a0\u00e0 ce stade que vous pouvez vous tromper car git n\u2019effectue pas la v\u00e9rification de disponibilit\u00e9 de votre projet (compilation). \u00a0C\u2019est \u00e0 cet instant que rentre en sc\u00e8ne \u00a0la \u00a0star j\u2019ai cit\u00e9 \u00a0<b><a href=\"https:\/\/maven.apache.org\/download.cgi\">MAVEN<\/a> <\/b>qui va \u00a0nous permettre de v\u00e9rifier que l\u2019on a rien cass\u00e9 en g\u00e9rant le conflit via sa commande <a href=\"https:\/\/maven.apache.org\/run-maven\/\"><b>mvn clean install<\/b><\/a> bien entendu pour les projets dont la gestion des librairies et l\u2019int\u00e9gration continue sont r\u00e9alis\u00e9s \u00e0 partir de cette derni\u00e8re.<\/p>\n<figure id=\"attachment_206\" aria-describedby=\"caption-attachment-206\" style=\"width: 907px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-206\" src=\"http:\/\/tutorialsdev.com\/wp-content\/uploads\/2017\/06\/clean-install.png\" alt=\"Clean install\" width=\"907\" height=\"283\" srcset=\"https:\/\/tutorialsdev.com\/wp-content\/uploads\/2017\/06\/clean-install.png 907w, https:\/\/tutorialsdev.com\/wp-content\/uploads\/2017\/06\/clean-install-300x94.png 300w, https:\/\/tutorialsdev.com\/wp-content\/uploads\/2017\/06\/clean-install-768x240.png 768w\" sizes=\"(max-width: 907px) 100vw, 907px\" \/><figcaption id=\"caption-attachment-206\" class=\"wp-caption-text\">\u00c9tat des commandes apr\u00e8s v\u00e9rification de la compilation<\/figcaption><\/figure>\n<h2><b>Cl\u00f4turer la gestion du conflit<\/b><\/h2>\n<p style=\"text-align:justify;\">Suite \u00e0 l\u2019\u00e9tape de v\u00e9rification vous \u00eates enfin pr\u00eat \u00e0 pousser votre d\u00e9veloppement sur la branche distante, \u00e0 moins qu\u2019un autre d\u00e9veloppeur se soit amus\u00e9 \u00e0 pousser un commit suppl\u00e9mentaire en lien avec le v\u00f4tre. Dans ce cas c\u2019est le dernier \u00e0 pousser un d\u00e9veloppement qui r\u00e9sout les potentiels conflits.<\/p>\n<p style=\"text-align:justify;\">Dans le meilleur des cas, apr\u00e8s avoir v\u00e9rifier la compilation de votre projet \u00a0vous pouvez lancer votre commande \u00a0<b><a href=\"https:\/\/git-scm.com\/docs\/git-rebase\">git rebase &#8211;continue<\/a> <\/b>votre gestion de conflits est termin\u00e9e. Vous pouvez donc pousser vos d\u00e9veloppements sur \u00a0la branche distance (<b>git push<\/b>).<\/p>\n<figure id=\"attachment_209\" aria-describedby=\"caption-attachment-209\" style=\"width: 907px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-209\" src=\"http:\/\/tutorialsdev.com\/wp-content\/uploads\/2017\/06\/etat-final.png\" alt=\"Etat final\" width=\"907\" height=\"283\" srcset=\"https:\/\/tutorialsdev.com\/wp-content\/uploads\/2017\/06\/etat-final.png 907w, https:\/\/tutorialsdev.com\/wp-content\/uploads\/2017\/06\/etat-final-300x94.png 300w, https:\/\/tutorialsdev.com\/wp-content\/uploads\/2017\/06\/etat-final-768x240.png 768w\" sizes=\"(max-width: 907px) 100vw, 907px\" \/><figcaption id=\"caption-attachment-209\" class=\"wp-caption-text\">\u00c9tat des commandes une fois la gestion du conflit r\u00e9solu<\/figcaption><\/figure>\n<p style=\"text-align:justify;\">Si vous avez des suggestions ou des questions un petit commentaire c\u2019est toujours utile. \ud83d\ude42<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nous ne pouvons pas aborder le sujet des outils de gestion de versions (versioning) sans aborder la gestion de conflits. Au cours des d\u00e9veloppements c\u2019est une situation couramment rencontr\u00e9e. Plusieurs outils peuvent \u00eatre utilis\u00e9s pour g\u00e9rer cette situation notamment KDIFF3, ce tutoriel mettra en \u0153uvre l\u2019utilisation de TortoiseGit . Comment aborder la gestion de conflits, cette \u00e9tape clef du d\u00e9veloppement  en \u00e9vitant certains pi\u00e8ges qui peuvent  nous mettre dans une situation inconfortable ? Nous allons r\u00e9pondre \u00e0 cette question en vous proposant une suite de commandes.<\/p>\n","protected":false},"author":2,"featured_media":211,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"gallery","meta":[],"categories":[2,4],"tags":[],"_links":{"self":[{"href":"https:\/\/tutorialsdev.com\/index.php\/wp-json\/wp\/v2\/posts\/140"}],"collection":[{"href":"https:\/\/tutorialsdev.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tutorialsdev.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tutorialsdev.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/tutorialsdev.com\/index.php\/wp-json\/wp\/v2\/comments?post=140"}],"version-history":[{"count":0,"href":"https:\/\/tutorialsdev.com\/index.php\/wp-json\/wp\/v2\/posts\/140\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tutorialsdev.com\/index.php\/wp-json\/wp\/v2\/media\/211"}],"wp:attachment":[{"href":"https:\/\/tutorialsdev.com\/index.php\/wp-json\/wp\/v2\/media?parent=140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tutorialsdev.com\/index.php\/wp-json\/wp\/v2\/categories?post=140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tutorialsdev.com\/index.php\/wp-json\/wp\/v2\/tags?post=140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}