[{"data":1,"prerenderedAt":559},["ShallowReactive",2],{"page-\u002Fgit\u002Fpourquoi-git":3,"pieces-git":516,"autour-\u002Fgit\u002Fpourquoi-git":542,"prerequis-\u002Fgit\u002Fpourquoi-git":547,"plan-git":548},{"id":4,"title":5,"body":6,"description":487,"extension":488,"ligne":234,"meta":489,"motsCles":490,"navigation":496,"niveau":497,"path":498,"prerequis":499,"ressources":500,"seo":509,"sources":510,"stem":514,"__hash__":515},"docs\u002Fgit\u002F01.pourquoi-git.md","Pourquoi Git",{"type":7,"value":8,"toc":474},"minimark",[9,14,27,31,35,72,91,94,97,101,104,109,125,128,132,135,156,159,163,166,201,215,218,222,225,239,242,269,273,280,316,319,322,341,362,365,381,385,390,417,423,432,436,470],[10,11,13],"h2",{"id":12},"ce-que-tu-vas-apprendre","Ce que tu vas apprendre",[15,16,17,21,24],"ul",{},[18,19,20],"li",{},"Pourquoi copier ses dossiers à la main ne suffit pas.",[18,22,23],{},"Ce que sont un dépôt, un commit et les quatre zones de Git.",[18,25,26],{},"Comment installer Git, te présenter à lui et créer ton premier dépôt.",[10,28,30],{"id":29},"le-problème-final_v2_vraidocx","Le problème : final_v2_vrai.docx",[32,33,34],"p",{},"Tu as sûrement déjà vu un dossier comme celui-ci :",[36,37,42],"pre",{"className":38,"code":39,"language":40,"meta":41,"style":41},"language-bash shiki shiki-themes github-light-default github-dark-default github-dark-default","rapport.docx\nrapport_v2.docx\nrapport_final.docx\nrapport_final_v2_vrai.docx\n","bash","",[43,44,45,54,60,66],"code",{"__ignoreMap":41},[46,47,50],"span",{"class":48,"line":49},"line",1,[46,51,53],{"class":52},"sIXEE","rapport.docx\n",[46,55,57],{"class":48,"line":56},2,[46,58,59],{"class":52},"rapport_v2.docx\n",[46,61,63],{"class":48,"line":62},3,[46,64,65],{"class":52},"rapport_final.docx\n",[46,67,69],{"class":48,"line":68},4,[46,70,71],{"class":52},"rapport_final_v2_vrai.docx\n",[32,73,74,75,78,79,82,83,86,87,90],{},"Avec un site web, c'est pire. Tu modifies ",[43,76,77],{},"index.html"," et ",[43,80,81],{},"style.css",", le menu casse, et tu ne sais plus ce qui marchait hier. Tu copies le dossier en ",[43,84,85],{},"site-backup",", puis ",[43,88,89],{},"site-backup-2",". Au bout d'une semaine, personne ne sait quelle copie est la bonne.",[32,92,93],{},"Et si vous êtes deux sur le projet, c'est le chaos : chacun envoie ses fichiers par message, et le dernier qui copie écrase le travail de l'autre.",[32,95,96],{},"Git règle ces deux problèmes. Il garde chaque version du projet et permet de travailler à plusieurs sans s'écraser.",[10,98,100],{"id":99},"ce-que-fait-git","Ce que fait Git",[32,102,103],{},"Git est un logiciel de gestion de versions. Il tourne sur ton ordinateur, en ligne de commande. Il ne remplace pas ton éditeur : tu continues à écrire ton code comme d'habitude. Git observe le dossier et enregistre des versions quand tu le lui demandes.",[105,106,108],"h3",{"id":107},"le-dépôt","Le dépôt",[32,110,111,112,116,117,120,121,124],{},"Un dépôt (en anglais ",[113,114,115],"em",{},"repository",", souvent abrégé ",[113,118,119],{},"repo",") est un dossier suivi par Git. Concrètement, c'est ton dossier de projet, plus un sous-dossier caché nommé ",[43,122,123],{},".git",". Ce sous-dossier contient tout l'historique. Tu n'as jamais besoin de l'ouvrir ni de le modifier à la main.",[32,126,127],{},"Git est distribué : chaque copie du dépôt contient l'historique complet. Si ton ordinateur tombe en panne, une copie sur GitHub ou chez un collègue suffit pour tout retrouver.",[105,129,131],{"id":130},"le-commit","Le commit",[32,133,134],{},"Un commit est une photo complète du projet à un instant donné. Chaque commit est rangé avec :",[15,136,137,140,143,146,153],{},[18,138,139],{},"son auteur ;",[18,141,142],{},"sa date ;",[18,144,145],{},"un message qui explique le changement ;",[18,147,148,149,152],{},"un identifiant unique, une suite de chiffres et de lettres, souvent affichée en version courte (par exemple ",[43,150,151],{},"a1b2c3d",") ;",[18,154,155],{},"un lien vers le commit précédent, son parent.",[32,157,158],{},"Dans les archives de l'immeuble, chaque classeur numéroté C1, C2, C3 est un commit : on peut toujours ressortir une ancienne photo.",[105,160,162],{"id":161},"les-quatre-zones","Les quatre zones",[32,164,165],{},"Un fichier passe par quatre endroits :",[167,168,169,176,186,195],"ol",{},[18,170,171,175],{},[172,173,174],"strong",{},"Le répertoire de travail"," : tes fichiers, tels que tu les édites.",[18,177,178,181,182,185],{},[172,179,180],{},"L'index"," (ou zone de préparation, ",[113,183,184],{},"staging area",") : ce qui partira dans le prochain commit.",[18,187,188,191,192,194],{},[172,189,190],{},"Le dépôt local"," : l'historique des commits, dans le dossier ",[43,193,123],{},".",[18,196,197,200],{},[172,198,199],{},"Le dépôt distant"," : une copie partagée, par exemple sur GitHub.",[32,202,203,204,207,208,78,211,214],{},"Manipule le schéma ci-dessous pour voir un fichier passer d'une zone à l'autre. Les commandes ",[43,205,206],{},"git add",", ",[43,209,210],{},"git commit",[43,212,213],{},"git push"," sont détaillées dans les chapitres suivants.",[216,217],"git-zones",{},[10,219,221],{"id":220},"installer-git","Installer Git",[32,223,224],{},"Vérifie d'abord si Git est déjà là :",[36,226,228],{"className":38,"code":227,"language":40,"meta":41,"style":41},"git --version\n",[43,229,230],{"__ignoreMap":41},[46,231,232,235],{"class":48,"line":49},[46,233,234],{"class":52},"git",[46,236,238],{"class":237},"s5iOY"," --version\n",[32,240,241],{},"Si la commande affiche un numéro de version (la dernière est la 2.56.1), c'est bon. Sinon :",[15,243,244,250,260],{},[18,245,246,249],{},[172,247,248],{},"Windows"," : télécharge l'installateur sur le site officiel git-scm.com. Il installe aussi Git Bash, un terminal où toutes les commandes de ce cours fonctionnent.",[18,251,252,255,256,259],{},[172,253,254],{},"macOS"," : la commande ",[43,257,258],{},"git --version"," propose d'installer les outils de développement d'Apple, qui contiennent Git.",[18,261,262,265,266,194],{},[172,263,264],{},"Linux (Debian, Ubuntu)"," : ",[43,267,268],{},"sudo apt install git",[10,270,272],{"id":271},"te-présenter-à-git","Te présenter à Git",[32,274,275,276,279],{},"Chaque commit enregistre un nom et une adresse e-mail. Indique-les une seule fois pour toute la machine, grâce à l'option ",[43,277,278],{},"--global"," :",[36,281,283],{"className":38,"code":282,"language":40,"meta":41,"style":41},"git config --global user.name \"Camille Martin\"\ngit config --global user.email \"camille@example.com\"\n",[43,284,285,302],{"__ignoreMap":41},[46,286,287,289,293,296,299],{"class":48,"line":49},[46,288,234],{"class":52},[46,290,292],{"class":291},"shWOn"," config",[46,294,295],{"class":237}," --global",[46,297,298],{"class":291}," user.name",[46,300,301],{"class":291}," \"Camille Martin\"\n",[46,303,304,306,308,310,313],{"class":48,"line":56},[46,305,234],{"class":52},[46,307,292],{"class":291},[46,309,295],{"class":237},[46,311,312],{"class":291}," user.email",[46,314,315],{"class":291}," \"camille@example.com\"\n",[32,317,318],{},"Remplace l'exemple par ton nom et ton adresse. Si tu utilises GitHub, mets la même adresse que sur ton compte : tes commits seront reliés à ton profil.",[32,320,321],{},"Profites-en pour régler le nom de la branche principale :",[36,323,325],{"className":38,"code":324,"language":40,"meta":41,"style":41},"git config --global init.defaultBranch main\n",[43,326,327],{"__ignoreMap":41},[46,328,329,331,333,335,338],{"class":48,"line":49},[46,330,234],{"class":52},[46,332,292],{"class":291},[46,334,295],{"class":237},[46,336,337],{"class":291}," init.defaultBranch",[46,339,340],{"class":291}," main\n",[342,343,344],"note",{},[32,345,346,347,350,351,354,355,358,359,194],{},"Sans ce réglage, ",[43,348,349],{},"git init"," nomme la branche principale ",[43,352,353],{},"master",". C'est le comportement par défaut jusqu'à Git 3.0. La plupart des projets récents, dont GitHub, utilisent ",[43,356,357],{},"main",". Tu peux aussi le préciser au cas par cas avec ",[43,360,361],{},"git init -b main",[32,363,364],{},"Pour relire ta configuration :",[36,366,368],{"className":38,"code":367,"language":40,"meta":41,"style":41},"git config --global --list\n",[43,369,370],{"__ignoreMap":41},[46,371,372,374,376,378],{"class":48,"line":49},[46,373,234],{"class":52},[46,375,292],{"class":291},[46,377,295],{"class":237},[46,379,380],{"class":237}," --list\n",[10,382,384],{"id":383},"créer-ton-premier-dépôt","Créer ton premier dépôt",[32,386,387,388,279],{},"Imagine un petit site de portfolio. Crée le dossier, entre dedans, puis lance ",[43,389,349],{},[36,391,393],{"className":38,"code":392,"language":40,"meta":41,"style":41},"mkdir portfolio\ncd portfolio\ngit init\n",[43,394,395,403,410],{"__ignoreMap":41},[46,396,397,400],{"class":48,"line":49},[46,398,399],{"class":52},"mkdir",[46,401,402],{"class":291}," portfolio\n",[46,404,405,408],{"class":48,"line":56},[46,406,407],{"class":237},"cd",[46,409,402],{"class":291},[46,411,412,414],{"class":48,"line":62},[46,413,234],{"class":52},[46,415,416],{"class":291}," init\n",[32,418,419,420,422],{},"Git répond qu'il a initialisé un dépôt vide. Le dossier ",[43,421,123],{}," vient d'apparaître. Rien n'est encore enregistré : le dépôt n'a aucun commit. Tu vas créer le premier au chapitre suivant.",[424,425,426],"warning",{},[32,427,428,429,431],{},"Lance ",[43,430,349],{}," dans le dossier du projet, jamais dans ton dossier personnel ou sur le Bureau entier. Sinon Git suivrait tous les fichiers de ton ordinateur qui s'y trouvent.",[10,433,435],{"id":434},"à-retenir","À retenir",[15,437,438,444,450,453,465],{},[18,439,440,441,194],{},"Git garde chaque version du projet : plus besoin de copies ",[43,442,443],{},"final_v2_vrai",[18,445,446,447,449],{},"Un dépôt est un dossier de projet avec un sous-dossier ",[43,448,123],{}," qui contient tout l'historique.",[18,451,452],{},"Un commit est une photo complète du projet, avec auteur, date, message et identifiant.",[18,454,455,456,207,459,78,462,194],{},"Configure une fois ",[43,457,458],{},"user.name",[43,460,461],{},"user.email",[43,463,464],{},"init.defaultBranch main",[18,466,467,469],{},[43,468,349],{}," transforme un dossier en dépôt.",[471,472,473],"style",{},"html pre.shiki code .sIXEE, html code.shiki .sIXEE{--shiki-light:#953800;--shiki-default:#FFA657;--shiki-dark:#FFA657}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s5iOY, html code.shiki .s5iOY{--shiki-light:#0550AE;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}html pre.shiki code .shWOn, html code.shiki .shWOn{--shiki-light:#0A3069;--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}",{"title":41,"searchDepth":56,"depth":62,"links":475},[476,477,478,483,484,485,486],{"id":12,"depth":56,"text":13},{"id":29,"depth":56,"text":30},{"id":99,"depth":56,"text":100,"children":479},[480,481,482],{"id":107,"depth":62,"text":108},{"id":130,"depth":62,"text":131},{"id":161,"depth":62,"text":162},{"id":220,"depth":56,"text":221},{"id":271,"depth":56,"text":272},{"id":383,"depth":56,"text":384},{"id":434,"depth":56,"text":435},"Le problème des fichiers final_v2_vrai, ce qu'est un dépôt et un commit, et comment installer et configurer Git.","md",{},[234,491,492,493,349,494,495],"versionnage","dépôt","commit","git config","installation",true,"debutant","\u002Fgit\u002Fpourquoi-git",null,[501,505],{"nom":502,"url":503,"type":504},"Pro Git en français (2e édition, 2014), chapitre « Démarrage rapide »","https:\u002F\u002Fgit-scm.com\u002Fbook\u002Ffr\u002Fv2","doc",{"nom":506,"url":507,"type":508},"OpenClassrooms, Gérez du code avec Git et GitHub","https:\u002F\u002Fopenclassrooms.com\u002Ffr\u002Fcourses\u002F7162856-gerez-du-code-avec-git-et-github","cours",{"title":5,"description":487},[511],{"nom":512,"url":513},"Documentation de référence Git (en anglais)","https:\u002F\u002Fgit-scm.com\u002Fdocs","git\u002F01.pourquoi-git","x9dcgAWh4OByVjaF9P5f4X9SV870FcCwTeaJnu80_0c",[517,518,522,526,530,534,538],{"path":498,"title":5,"stem":514},{"path":519,"title":520,"stem":521},"\u002Fgit\u002Fpremiers-commits","Premiers commits","git\u002F02.premiers-commits",{"path":523,"title":524,"stem":525},"\u002Fgit\u002Fbranches","Les branches","git\u002F03.branches",{"path":527,"title":528,"stem":529},"\u002Fgit\u002Ftravailler-a-plusieurs","Travailler à plusieurs","git\u002F04.travailler-a-plusieurs",{"path":531,"title":532,"stem":533},"\u002Fgit\u002Fannuler","Annuler une erreur","git\u002F05.annuler",{"path":535,"title":536,"stem":537},"\u002Fgit\u002Frebase","Le rebase","git\u002F06.rebase",{"path":539,"title":540,"stem":541},"\u002Fgit","Git","git\u002Findex",[543,545],{"title":540,"path":539,"stem":541,"description":544,"children":-1},"Le mémo des commandes Git du quotidien : configurer, enregistrer, brancher, partager, annuler.",{"title":520,"path":519,"stem":521,"description":546,"children":-1},"Le cycle de base de Git, status, add, commit, puis log et diff pour relire l'historique, avec un .gitignore et de bons messages.",[],[549,550,551,552,554,555,557],{"path":498,"title":5,"niveau":497,"stem":514},{"path":519,"title":520,"niveau":497,"stem":521},{"path":523,"title":524,"niveau":497,"stem":525},{"path":527,"title":528,"niveau":553,"stem":529},"intermediaire",{"path":531,"title":532,"niveau":553,"stem":533},{"path":535,"title":536,"niveau":556,"stem":537},"avance",{"path":539,"title":540,"niveau":558,"stem":541},"memo",1794583450558]