{"id":35761300,"url":"https://github.com/frozar/git-workshop-1","last_synced_at":"2026-01-20T17:08:49.047Z","repository":{"id":200710705,"uuid":"706090801","full_name":"frozar/git-workshop-1","owner":"frozar","description":null,"archived":false,"fork":false,"pushed_at":"2025-01-28T10:32:52.000Z","size":0,"stargazers_count":0,"open_issues_count":0,"forks_count":12,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-28T11:32:37.614Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/frozar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-10-17T09:34:45.000Z","updated_at":"2025-01-28T10:32:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"83097da5-cd71-468f-9ec9-a7fdad331573","html_url":"https://github.com/frozar/git-workshop-1","commit_stats":null,"previous_names":["frozar/git_exo_1","frozar/git-workshop-1"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/frozar/git-workshop-1","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frozar%2Fgit-workshop-1","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frozar%2Fgit-workshop-1/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frozar%2Fgit-workshop-1/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frozar%2Fgit-workshop-1/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/frozar","download_url":"https://codeload.github.com/frozar/git-workshop-1/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frozar%2Fgit-workshop-1/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28607624,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T16:10:39.856Z","status":"ssl_error","status_checked_at":"2026-01-20T16:10:39.493Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-06T23:03:07.400Z","updated_at":"2026-01-20T17:08:49.041Z","avatar_url":"https://github.com/frozar.png","language":null,"readme":"# Consigne\n\n**Objectif** : modifier la branche principale de votre dépôt à l'aide de branches et de merges.\n\nInstructions\n - 1 personne du groupe fork ce dépôt principal\n - la personne qui crée le fork doit ajouter ces collègues comme collaborateur du dépôt\n - les collaborateurs récupèrent le dépôt forké\n - chaque collaborateur crée une branche au format `prenom-nom` à partir du commit initial\n - à partir de sa branche `prenom-nom`, chaque collaborateur va ajouter son prénom/nom à la liste des auteurs dans le fichier `authors.txt` dans un commit\n - à tour de rôle :\n   1. 1 collaborateur va merger sa branche `prenom-nom` avec la branche `main` local et propager sa branche `main` sur le dépôt distant\n   2. les collaborateurs qui n'ont pas fait la propagation doivent mettre à jour leur branche `main` locale avant de faire leur merge, reprendre l'étape 'i.'\n - à la fin de l'activité, le dépôt du groupe devrait avoir :\n   - un historique de commits avec des ponts qui représentent les différents merges\n   - une la branche principale et les branches de développement\n\nPour se faire, vous aurez besoin de l'ensemble des savoirs du workshop 0, plus les commandes git suivantes :\n - **branch** : lister les branches locales\n - **branch \\\u003cnom-de-branche\\\u003e** : créer une branche\n - **branch -D \\\u003cnom-de-branche\\\u003e** : supprimer une branche\n - **switch \\\u003cnom-de-branche\\\u003e** : se déplacer sur une branche\n - **switch -c \\\u003cnom-de-branche\\\u003e** : créer et se déplacer sur une branche\n - **push** : propager les contributions d'une branche sur un dépôt distant\n - **merge** : récupérer les contributions d'une branche dans la branche courante\n\nLisez les sections de la \"Boite à outils\" pour réaliser cet exercice.\n\n## Dans l'historique de commits\n\nUne fois que les différentes branches `prenom-nom` seront créées, vous devriez voir \nun historique similaire à celui-ci :\n\n![image](img/historique-initial.png)\n\nUne fois que toutes les branches seront mergées dans la branche principale, \nvous devriez voir un histoirique similaire à celui-ci, avec les différents ponts\nreprésentants les différents merges :\n\n![image](img/historique-final.png)\n\nGénéralement, suite au merge d'une branche de développement dans la branche main,\nvous n'avez plus besoin de cette branche locale. Je conseille de supprimer les \nbranches qui ne sont plus utiles après un merge.\n\nVisualisez les changements de l'historique des commits après chaque commande git.\n\n## Bilan\n\nVous savez maintenant travailler à plusieurs sur un dépôt GitHub et utiliser des \nmerges avec des branches locales pour intégrer vos contributions à la branche \nprincipale.\n\n**Remarque 1** : Lorsque que vous mergez une branche sur la branche principale locale,\nvous n'avez plus besoin de la branche mergé. Vous pouvez supprimer des branches \nlocales avec la commande `git branch -d \u003cnom-de-branche\u003e`.\n\n**Remarque 2** : Cette méthode ne vous permet pas de faire de revu de code. Avant\nde faire le merge, vous ne visualisez pas les changements qui ont été faits dans\nla branche distante. Vous voyez uniquement les changements qui provoquent des conflits.\n\n**Remarque 3** : Pour pouvoir appliquer cette méthode, vous devez avoir les droits\nde pousser sur la branche principale. La branche principale est la version stable \nde votre projet, elle devrait donc être protégée. Une branche protégée interdit\nde pousser des modifications sur elle directement. Pour modifier une branche protégée,\nvous devez faire des Pull Requests sur GitHub.\n\n# Boite à outils\n\n## Message d'erreur au moment du push\n\nLorsque vous poussez pour la première fois, il est possible que git vous fasse remonter \nun message d'erreur vous indiquant qu'il ne sait vers quelle branche distante pousser.\nVous devez alors préciser qu'elle branche tracker pour la branche que vous souhaitez\npousser. Par exemple, si vous souhaitez pousser la branche `feature-1` sur la branche\n`feature-1` distante, et indiquer à git que cette branche locale doit tracker la branche\ndu même nom sur le dépôt distant, vous devez utiliser la commande suivante :\n`git push -u origin feature-1`\n\nPour éviter de préciser l'option `-u` à chaque nouvelle branche que vous créez \nlocalement, vous pouvez mettre à jour votre configuration git avec la commande\nsuivante :\n`git config --global push.autoSetupRemote true`\n\nCette commande mettra à jour le fichier de configuration git qui se trouve dans\nvotre $HOME, à savoir `~/.gitconfig`.\n\nDe nombreux comportement de git sont configurable avec la commande `git config`. Vous \npouvez consulter la documentation de commande avec `git config --help`.\n\n## Comment merger les contributions d'une branche dans une autre branche ?\n\nSi vous voulez merger les contributions d'une branche `feature-1` dans la branche `main` :\n - placez vous sur la branche `main`: `git switch main`\n - mergez la branche `feature-1` : `git merge feature-1`\n\nLorsque vous mergez les contributions d'une branche dans une autre branche, vous verrez\nla création d'un pont dans git-graph.\n\n## La résolution de conflit\n\nLorsque vous faites un merge avec git, vous pouvez avoir des conflits qui apparaîssent.\nCela se produit lorsque git tente de fusionner les contributions issue d'une branche\nest qu'il remarque qu'il y a eu plusieurs modifications sur une même ligne et que sa\nstratégie de résolution a échoué. Dans ce cas, git vous invite à résoudre le conflit\nmanuellement.\n\nLorsque vous avez un conflit, utilisez `git status` pour savoir quels sont les fichiers\nqui sont marqué comme \"both modified\". Les fichiers dans cet état ont été annotés\navec les lignes suivantes :\n - `\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD`\n - `=======`\n - `\u003e\u003e\u003e\u003e\u003e\u003e\u003e \u003cnom-de-branche\u003e`\n\nLes sections du fichier entre les lignes `\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD` et `=======` correspondent aux\nlignes issue des modifications de la branche courante, sur laquelle vous êtes.\n\nLes sections du fichier entre les lignes `=======` et `\u003e\u003e\u003e\u003e\u003e\u003e\u003e \u003cnom-de-branche\u003e` \ncorrespondent aux lignes qui ont aussi été modifié par la branche qui vous essayez \nde merger, d'intégrer.\n\nSi vous ouvrez un fichier en clonflit avec VSCode, vous verrez quelque chose de \nsimilaire à cette image :  \n\n![image](img/conflit-initial.png)\n\nPour résoudre un conflit, vous avez 3 options :\n - `Accept Current Change` : accepter uniquement les modifications de la branche sur laquelle vous êtes\n - `Accept Incoming Change` : accepter uniquement les modifications de la branche avec laquelle vous essayez de merger\n - `Accept Both Changes` : accepter les deux modifications pour pouvoir éventuellement les éditer manuellement\n\nSi vous cliquez sur l'option `Accept Current Change`, il ne restera que les lignes de\nla section verte :\n\n![image](img/conflit-accept-current-change.png)\n\nSi vous cliquez sur l'option `Accept Incoming Change`, il ne restera que les lignes de\nla section bleue :\n\n![image](img/conflit-accept-incoming-change.png)\n\nSi vous cliquez sur l'option `Accept Both Changes`, les lignes issues issues des 2 \nblocs, vert et bleu, resteront dans le fichier :\n\n![image](img/conflit-accept-both-changes.png)\n\nUne fois que vous avez choisi une option, et potentiellement modifié le fichier, pour\nretrouver un état stable, **n'oubliez pas d'enregistrer vos modifications**.\n\nPour indiquer à git que vous avez résolu le conflit, suivez les indications proposées\npar `git status`.\n\nIl proposera certainement d'ajouter au `Stage` les fichiers pour lesquels vous avez\nrésolut des conflits : `git add \u003cnom-de-fichier\u003e`\n\nEnsuite, utilisez la commande `git commit` pour finaliser le merge :\n`git commit`","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrozar%2Fgit-workshop-1","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrozar%2Fgit-workshop-1","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrozar%2Fgit-workshop-1/lists"}