{"id":3492,"date":"2019-04-07T14:00:20","date_gmt":"2019-04-07T12:00:20","guid":{"rendered":"http:\/\/www.unicoda.com\/?p=3492"},"modified":"2019-04-06T22:19:23","modified_gmt":"2019-04-06T20:19:23","slug":"gestion-des-depots-git","status":"publish","type":"post","link":"https:\/\/www.unicoda.com\/?p=3492","title":{"rendered":"Gestion des d\u00e9p\u00f4ts git"},"content":{"rendered":"\n<p>Au fil des ann\u00e9es, j&rsquo;ai accumul\u00e9 pas loin de 70 d\u00e9p\u00f4ts git, certains presque vides, d&rsquo;autres contenant des instructions de d\u00e9ploiement de service, ou encore, mes divers essais successifs pour me familiariser avec l&rsquo;une ou l&rsquo;autre technologie. Lors de la panne r\u00e9cente de mon serveur auto-h\u00e9berg\u00e9, j&rsquo;ai craint un moment d&rsquo;avoir perdu une partie du code produit ces derni\u00e8res ann\u00e9es. Heureusement, cela ne fut pas le cas.<\/p>\n\n\n\n<p>Bien s\u00fbr, une partie des d\u00e9p\u00f4ts est toujours pr\u00e9sente dans un coin de mon disque dur, bien que n&rsquo;ayant pas \u00e9t\u00e9 l&rsquo;objet de modification r\u00e9cente, et m&rsquo;assure ainsi une sauvegarde locale de ces derniers: une n-i\u00e8me duplication. Continuant le chemin du c\u00f4t\u00e9 de ma r\u00e9silience num\u00e9rique, je me suis donc int\u00e9ress\u00e9 au moyen de conserver facilement l&rsquo;ensemble de mes d\u00e9p\u00f4ts git en local. Pour arriver un r\u00e9sultat satisfaisant, je me suis donc tourn\u00e9 vers <em>repo<\/em>, programme \u00e9crit par Google pour g\u00e9rer les d\u00e9p\u00f4ts Android et que j&rsquo;avais eu l&rsquo;occasion de d\u00e9couvrir durant mes \u00e9tudes d&rsquo;ing\u00e9nieur.<br><\/p>\n\n\n\n<p>J&rsquo;ai donc ajout\u00e9 un nouveau d\u00e9p\u00f4t \u00e0 ma liste, contenant un readme et un fichier default.xml. Le fichier default.xml suit les <a rel=\"noreferrer noopener\" aria-label=\"r\u00e8gles de syntaxe (s\u2019ouvre dans un nouvel onglet)\" href=\"https:\/\/gerrit.googlesource.com\/git-repo\/+\/master\/docs\/manifest-format.md\" target=\"_blank\">r\u00e8gles de syntaxe<\/a> des fichiers manifest de repo et liste d\u00e9sormais l&rsquo;ensemble de mes d\u00e9p\u00f4ts git. En voici une version simplifi\u00e9e :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;<br>&lt;manifest&gt;<br>  &lt;remote name=\"github\" fetch=\"ssh:\/\/git@github.com\/vvision\" \/&gt;<br>  &lt;default revision=\"master\" remote=\"github\" sync-j=\"4\" \/&gt;<br><br>  &lt;project name=\"eslint-config\" \/&gt;<br>  &lt;project name=\"manifest\" path=\"manifest\/manifest\" \/&gt;<br>  &lt;project name=\"prettier-config\"\/&gt;<br>&lt;\/manifest&gt; <\/pre>\n\n\n\n<p>Quelques commentaires. Je commence par d\u00e9finir un <em>remote<\/em>, endroit o\u00f9 r\u00e9cup\u00e9rer mes d\u00e9p\u00f4ts, lui donne un nom et pr\u00e9cise l&rsquo;url utilis\u00e9e pour la r\u00e9cup\u00e9ration d&rsquo;un d\u00e9p\u00f4t. Je d\u00e9finis ensuite les param\u00e8tres par d\u00e9faut en pr\u00e9cisant ici que je souhaite r\u00e9cup\u00e9rer la branche master, en utilisant la configuration du remote nomm\u00e9e github et en autorisant 4 jobs concurrents pour les op\u00e9rations de synchronisation. Reste ensuite \u00e0 d\u00e9finir les d\u00e9p\u00f4ts \u00e0 r\u00e9cup\u00e9rer, le param\u00e8tre minimum \u00e9tant le nom du d\u00e9p\u00f4t sur le serveur distant. \u00c0 noter \u00e9galement la pr\u00e9sence du param\u00e8tre <em>path<\/em> qui permet de choisir l&#8217;emplacement final du contenu du d\u00e9p\u00f4t, ce qui se r\u00e9v\u00e8le d&rsquo;une grande utilit\u00e9 pour grouper ses d\u00e9p\u00f4ts dans diff\u00e9rents r\u00e9pertoires.<\/p>\n\n\n\n<p>Une fois le fichier manifest compl\u00e9t\u00e9 et pousser dans son d\u00e9p\u00f4t distant, on peut commencer la r\u00e9cup\u00e9ration de la liste de d\u00e9p\u00f4ts en utilisant successivement les commandes :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">repo init -u git@github.com:vvision\/manifest.git<\/pre>\n\n\n\n<p>Puis :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">repo sync<\/pre>\n\n\n\n<p>\u00c0 l&rsquo;issue de l&rsquo;ex\u00e9cution de cette deuxi\u00e8me commande, on dispose d\u00e9sormais de l&rsquo;ensemble des d\u00e9p\u00f4ts d\u00e9finis dans le manifest sur le disque local et cela de mani\u00e8re totalement automatique. On notera en particulier la pr\u00e9sence de l&rsquo;instruction <em>status<\/em> permettant d&rsquo;avoir un aper\u00e7u de l&rsquo;\u00e9tat des d\u00e9p\u00f4ts et l&rsquo;instruction <em>forall<\/em> permettant d&rsquo;ex\u00e9cuter une commande sur l&rsquo;ensemble des d\u00e9p\u00f4ts.<\/p>\n\n\n\n<p>Sources :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a rel=\"noreferrer noopener\" aria-label=\"Repo Command Reference (s\u2019ouvre dans un nouvel onglet)\" href=\"https:\/\/source.android.com\/setup\/develop\/repo\" target=\"_blank\">Repo Command Reference<\/a><\/li><li><a href=\"http:\/\/www.yoannsculo.fr\/git-repo-outil-gestion-multiples-repositories-arracher-cheveux\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"repo - un outil pour g\u00e9rer des repositories multiples sans trop s'arracher les cheveux (s\u2019ouvre dans un nouvel onglet)\">repo &#8211; un outil pour g\u00e9rer des repositories multiples sans trop s&rsquo;arracher les cheveux<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Au fil des ann\u00e9es, j&rsquo;ai accumul\u00e9 pas loin de 70 d\u00e9p\u00f4ts git, certains presque vides, d&rsquo;autres contenant des instructions de d\u00e9ploiement de service, ou encore, mes divers essais successifs pour me familiariser avec l&rsquo;une ou l&rsquo;autre technologie. Lors de la panne r\u00e9cente de mon serveur auto-h\u00e9berg\u00e9, j&rsquo;ai craint un moment d&rsquo;avoir perdu une partie du &hellip; <a href=\"https:\/\/www.unicoda.com\/?p=3492\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;Gestion des d\u00e9p\u00f4ts git&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[15,405],"class_list":["post-3492","post","type-post","status-publish","format-standard","hentry","category-terminal","tag-git","tag-repo"],"_links":{"self":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/3492","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3492"}],"version-history":[{"count":3,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/3492\/revisions"}],"predecessor-version":[{"id":3514,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/3492\/revisions\/3514"}],"wp:attachment":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3492"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3492"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3492"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}