{"id":31104629,"url":"https://github.com/madjeek-web/github-guide","last_synced_at":"2026-05-03T22:32:56.091Z","repository":{"id":309278279,"uuid":"1035687489","full_name":"madjeek-web/GITHUB-GUIDE","owner":"madjeek-web","description":"Features and craftsmanship with GitHub - Guide / Helper - Git Cheat Sheet","archived":false,"fork":false,"pushed_at":"2026-03-05T22:04:32.000Z","size":836,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-06T01:55:49.932Z","etag":null,"topics":["base-project","beginner","beginner-friendly","beginners","cheatsheet","documentation","fabien-conejero","git","github","github-actions","github-config","github-guide","guidebook","helper","junior-developer","madjeek","starter-kit","students","teachers","welcome"],"latest_commit_sha":null,"homepage":"https://github.com/madjeek-web","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/madjeek-web.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-10T23:34:18.000Z","updated_at":"2026-03-05T22:04:35.000Z","dependencies_parsed_at":"2025-08-16T03:47:08.172Z","dependency_job_id":null,"html_url":"https://github.com/madjeek-web/GITHUB-GUIDE","commit_stats":null,"previous_names":["madjeek-web/github-guide"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/madjeek-web/GITHUB-GUIDE","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madjeek-web%2FGITHUB-GUIDE","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madjeek-web%2FGITHUB-GUIDE/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madjeek-web%2FGITHUB-GUIDE/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madjeek-web%2FGITHUB-GUIDE/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/madjeek-web","download_url":"https://codeload.github.com/madjeek-web/GITHUB-GUIDE/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/madjeek-web%2FGITHUB-GUIDE/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32587818,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"ssl_error","status_checked_at":"2026-05-03T22:09:10.534Z","response_time":103,"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":["base-project","beginner","beginner-friendly","beginners","cheatsheet","documentation","fabien-conejero","git","github","github-actions","github-config","github-guide","guidebook","helper","junior-developer","madjeek","starter-kit","students","teachers","welcome"],"created_at":"2025-09-17T03:24:49.211Z","updated_at":"2026-05-03T22:32:56.083Z","avatar_url":"https://github.com/madjeek-web.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![GitHub stars](https://img.shields.io/github/stars/madjeek-web/GITHUB-GUIDE?style=social)](https://github.com/madjeek-web/GITHUB-GUIDE/stargazers)\n[![GitHub last commit](https://img.shields.io/github/last-commit/madjeek-web/GITHUB-GUIDE)](https://github.com/madjeek-web/GITHUB-GUIDE/commits/main)\n[![Maintained](https://img.shields.io/badge/Maintained-yes-green.svg)](https://github.com/madjeek-web/GITHUB-GUIDE)\n[![GitHub forks](https://img.shields.io/github/forks/madjeek-web/GITHUB-GUIDE?style=social)](https://github.com/madjeek-web/GITHUB-GUIDE/network/members)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)\n\n---\n\n# GITHUB-GUIDE\n\n\u003e Guide complet Git et GitHub pour débutants et développeurs juniors.\n\u003e Complete Git and GitHub guide for beginners and junior developers.\n\n---\n\n**Lire en français** : [Section française](#-version-française)  \n**Read in English** : [English section](#-english-version)\n\n---\n\n## Table des matières / Table of Contents\n\n### Français\n\n- [A propos de ce guide](#a-propos-de-ce-guide)\n- [Prérequis](#prérequis)\n- [Comprendre Git et GitHub](#comprendre-git-et-github)\n- [Installation et configuration](#installation-et-configuration)\n- [Structure d'un dépôt professionnel](#structure-dun-dépôt-professionnel)\n- [Créer sa structure depuis l'interface web GitHub](#créer-sa-structure-depuis-linterface-web-github)\n- [Créer sa structure depuis la ligne de commande](#créer-sa-structure-depuis-la-ligne-de-commande)\n- [Commandes Git essentielles](#commandes-git-essentielles)\n- [Branches et workflow](#branches-et-workflow)\n- [Messages de commit](#messages-de-commit)\n- [GitHub Actions et CI/CD](#github-actions-et-cicd)\n- [Contribuer à un projet open source](#contribuer-à-un-projet-open-source)\n- [Fichiers importants d'un dépôt](#fichiers-importants-dun-dépôt)\n- [Badges GitHub](#badges-github)\n- [Ressources et liens](#ressources-et-liens)\n- [Lexique Git et GitHub](#lexique-git-et-github)\n- [FAQ Français](#faq-français)\n\n### English\n\n- [About this guide](#about-this-guide)\n- [Prerequisites](#prerequisites)\n- [Understanding Git and GitHub](#understanding-git-and-github)\n- [Installation and configuration](#installation-and-configuration)\n- [Professional repository structure](#professional-repository-structure)\n- [Creating structure from the GitHub web interface](#creating-structure-from-the-github-web-interface)\n- [Creating structure from the command line](#creating-structure-from-the-command-line)\n- [Essential Git commands](#essential-git-commands)\n- [Branches and workflow](#branches-and-workflow-1)\n- [Commit messages](#commit-messages)\n- [GitHub Actions and CI/CD](#github-actions-and-cicd-1)\n- [Contributing to open source](#contributing-to-open-source)\n- [Important repository files](#important-repository-files)\n- [GitHub Badges](#github-badges)\n- [Resources and links](#resources-and-links)\n- [Git and GitHub Glossary](#git-and-github-glossary)\n- [FAQ English](#faq-english)\n\n---\n\n---\n\n## Version Française\n\n---\n\n### A propos de ce guide\n\nCe guide s'adresse aux personnes qui débutent en informatique, aux étudiants en première année de développement, et à toute personne souhaitant comprendre Git et GitHub de façon concrète et progressive. Aucune connaissance préalable n'est requise pour commencer.\n\nGit est un outil de gestion de version. GitHub est une plateforme en ligne qui héberge des dépôts Git. Les deux ne sont pas la même chose, mais ils fonctionnent ensemble. Ce guide vous explique comment les utiliser efficacement, depuis l'installation jusqu'aux pratiques professionnelles.\n\nCheat sheet visuelle (image) disponible dans ce dépôt :\n\n![GitHub Cheat Sheet](img/GitHub-Cheat-Sheet-IMG-FR.jpg)\n\nCheat sheet PDF téléchargeable : [Git-Cheat-Sheet_FR.pdf](Git-Cheat-Sheet_FR.pdf)\n\n---\n\n### Prérequis\n\nAvant de commencer, vous avez besoin de :\n\n- Un compte GitHub gratuit : [https://github.com/join](https://github.com/join)\n- Git installé sur votre machine : [https://git-scm.com/downloads](https://git-scm.com/downloads)\n- Un terminal (invite de commandes, PowerShell, bash, zsh...)\n- Un éditeur de code (Visual Studio Code est recommandé pour les débutants) : [https://code.visualstudio.com/](https://code.visualstudio.com/)\n\n---\n\n### Comprendre Git et GitHub\n\n**Git** est un logiciel libre installé localement sur votre ordinateur. Il permet de suivre l'historique de vos fichiers, de travailler sur plusieurs versions en parallèle et de revenir en arrière si besoin.\n\n**GitHub** est un site web qui héberge vos dépôts Git en ligne. Il permet de collaborer avec d'autres personnes, de rendre votre code public ou privé, et d'utiliser des outils comme les Issues, les Pull Requests ou les GitHub Actions.\n\n| Concept | Git | GitHub |\n|---|---|---|\n| Type | Logiciel local | Plateforme en ligne |\n| Rôle | Gestion de version | Hébergement et collaboration |\n| Fonctionne sans internet | Oui | Non |\n| Gratuit | Oui | Oui (avec options payantes) |\n\n**Autres alternatives à GitHub** (si vous êtes curieux) :\n\n- [GitLab](https://gitlab.com/) : similaire à GitHub, très utilisé en entreprise\n- [Bitbucket](https://bitbucket.org/) : utilisé souvent avec les outils Atlassian\n\n---\n\n### Installation et configuration\n\n#### Installer Git\n\nRendez-vous sur [https://git-scm.com/downloads](https://git-scm.com/downloads) et téléchargez la version correspondant à votre système d'exploitation (Windows, macOS, Linux).\n\nVérifiez l'installation en ouvrant un terminal et en tapant :\n\n```bash\ngit --version\n```\n\nVous devriez voir quelque chose comme `git version 2.43.0`.\n\n#### Configurer votre identité\n\nAvant d'utiliser Git, vous devez indiquer votre nom et votre adresse e-mail. Ces informations apparaîtront dans chaque commit que vous créerez.\n\n```bash\ngit config --global user.name \"Votre Nom\"\ngit config --global user.email \"votre@email.com\"\n```\n\n#### Configurer l'éditeur par défaut (optionnel)\n\n```bash\n# Pour utiliser Visual Studio Code comme éditeur Git\ngit config --global core.editor \"code --wait\"\n\n# Pour utiliser nano (plus simple en terminal)\ngit config --global core.editor \"nano\"\n```\n\n#### Vérifier votre configuration\n\n```bash\ngit config --list\n```\n\n#### Configurer l'authentification SSH (recommandé)\n\nL'authentification SSH est plus sécurisée et plus pratique que le mot de passe. Elle vous évite de saisir vos identifiants à chaque opération.\n\n```bash\n# Générer une clé SSH\nssh-keygen -t ed25519 -C \"votre@email.com\"\n\n# Afficher la clé publique à copier dans GitHub\ncat ~/.ssh/id_ed25519.pub\n```\n\nEnsuite, allez dans GitHub \u003e Settings \u003e SSH and GPG keys \u003e New SSH key et collez votre clé.\n\nDocumentation officielle SSH : [https://docs.github.com/fr/authentication/connecting-to-github-with-ssh](https://docs.github.com/fr/authentication/connecting-to-github-with-ssh)\n\n---\n\n### Structure d'un dépôt professionnel\n\nUne bonne structure de dépôt facilite la lecture, la maintenance et la collaboration. Voici la structure recommandée, utilisée dans la majorité des projets professionnels :\n\n```\nmon-projet/\n├── .github/\n│   ├── workflows/            # Fichiers GitHub Actions (CI/CD)\n│   │   └── ci.yml\n│   ├── ISSUE_TEMPLATE/\n│   │   ├── bug_report.md\n│   │   └── feature_request.md\n│   └── PULL_REQUEST_TEMPLATE.md\n├── docs/                     # Documentation détaillée\n│   └── architecture.md\n├── src/                      # Code source principal\n│   ├── main/                 # Code de production\n│   └── test/                 # Tests automatisés\n├── scripts/                  # Scripts utilitaires\n├── img/                      # Images du projet (captures, logos, cheat sheets...)\n├── build/                    # Fichiers de compilation (souvent dans .gitignore)\n├── dist/                     # Fichiers distribuables (optionnel)\n├── .gitignore                # Fichiers à ignorer dans Git\n├── .editorconfig             # Configuration de l'éditeur\n├── LICENSE                   # Licence du projet\n├── README.md                 # Fichier principal de présentation\n├── CONTRIBUTING.md           # Guide de contribution\n├── CHANGELOG.md              # Historique des changements\n├── SECURITY.md               # Politique de sécurité\n└── CODE_OF_CONDUCT.md        # Code de conduite\n```\n\n#### Rôle de chaque élément\n\n**Le dossier .github/**\n\nCe dossier est reconnu automatiquement par GitHub. Il contient la configuration propre à la plateforme. Le sous-dossier `workflows/` contient les automatisations (CI/CD). Le sous-dossier `ISSUE_TEMPLATE/` contient les modèles de tickets. Le fichier `PULL_REQUEST_TEMPLATE.md` est le modèle affiché quand quelqu'un ouvre une Pull Request.\n\n**Le dossier docs/**\n\nLa documentation détaillée du projet : architecture, décisions techniques, guides d'utilisation, spécifications. Ce dossier peut aussi alimenter GitHub Pages pour générer un site web statique.\n\n**Le dossier src/**\n\nLe code source de l'application. Il est classique de séparer `main/` (code de production) et `test/` (tests).\n\n**Le dossier scripts/**\n\nScripts d'automatisation, de déploiement, d'analyse ou de maintenance.\n\n**Les fichiers racine**\n\nCes fichiers sont placés à la racine car GitHub les reconnaît et les affiche automatiquement.\n\n---\n\n### Créer sa structure depuis l'interface web GitHub\n\nCette méthode est idéale si vous débutez ou si vous n'avez pas encore Git installé localement.\n\n#### Etape 1 : Créer un nouveau dépôt\n\n1. Allez sur [https://github.com/new](https://github.com/new)\n2. Remplissez le nom du dépôt\n3. Ajoutez une description courte\n4. Choisissez Public ou Private\n5. Cochez \"Add a README file\"\n6. Choisissez un fichier `.gitignore` selon votre langage\n7. Choisissez une licence (MIT pour commencer)\n8. Cliquez sur \"Create repository\"\n\n#### Etape 2 : Créer des fichiers et dossiers\n\nPour créer un fichier dans un dossier qui n'existe pas encore, cliquez sur \"Add file\" \u003e \"Create new file\" et tapez directement le chemin avec le `/`. Par exemple, entrez `docs/architecture.md` pour créer le fichier `architecture.md` dans le dossier `docs/`.\n\nGitHub crée automatiquement les dossiers intermédiaires.\n\n#### Etape 3 : Ajouter un fichier CONTRIBUTING.md\n\nCliquez sur \"Add file\" \u003e \"Create new file\" et nommez-le `CONTRIBUTING.md`.\n\n#### Etape 4 : Créer les templates d'issues\n\nCliquez sur \"Add file\" \u003e \"Create new file\" et entrez le chemin `.github/ISSUE_TEMPLATE/bug_report.md`.\n\n#### Etape 5 : Configurer GitHub Actions\n\nCliquez sur \"Add file\" \u003e \"Create new file\" et entrez `.github/workflows/ci.yml`.\n\n#### Etape 6 : Configurer les labels\n\nDans l'onglet \"Issues\", cliquez sur \"Labels\" pour gérer vos labels. Les labels recommandés sont :\n\n| Label | Description |\n|---|---|\n| bug | Quelque chose ne fonctionne pas |\n| enhancement | Nouvelle fonctionnalité |\n| documentation | Amélioration de la documentation |\n| good first issue | Idéal pour une première contribution |\n| help wanted | Aide externe souhaitée |\n| question | Demande d'information |\n| wontfix | Ce problème ne sera pas traité |\n| duplicate | Ce problème a déjà été signalé |\n\n---\n\n### Créer sa structure depuis la ligne de commande\n\n#### Initialiser un nouveau projet\n\n```bash\n# Créer le dossier du projet et entrer dedans\nmkdir mon-projet\ncd mon-projet\n\n# Initialiser le dépôt Git\ngit init\n```\n\n#### Créer la structure complète en une seule commande\n\n```bash\nmkdir -p .github/{workflows,ISSUE_TEMPLATE} docs src/{main,test} scripts img build dist\n```\n\n#### Créer les fichiers de base\n\n```bash\ntouch .gitignore LICENSE README.md CONTRIBUTING.md CHANGELOG.md SECURITY.md CODE_OF_CONDUCT.md\ntouch .github/PULL_REQUEST_TEMPLATE.md\ntouch .github/ISSUE_TEMPLATE/bug_report.md\ntouch .github/ISSUE_TEMPLATE/feature_request.md\ntouch .github/workflows/ci.yml\ntouch docs/architecture.md\n```\n\n#### Créer un .gitignore complet\n\n```bash\ncat \u003e .gitignore \u003c\u003c 'EOF'\n# Dépendances\nnode_modules/\nvendor/\n.venv/\n\n# Build\nbuild/\ndist/\n*.class\n*.jar\n*.war\n*.ear\n\n# Logs\n*.log\n*.tmp\n*.swp\n\n# Environnement\n.env\n.env.local\n.env.production\n\n# IDE\n.idea/\n*.iml\n.vscode/\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n\n# OS\n.DS_Store\nThumbs.db\n\n# Tests\ncoverage/\n.nyc_output/\nEOF\n```\n\n#### Effectuer le premier commit\n\n```bash\n# Ajouter tous les fichiers\ngit add .\n\n# Créer le premier commit\ngit commit -m \"feat: initial project structure\"\n\n# Connecter au dépôt GitHub (remplacez avec votre URL)\ngit remote add origin git@github.com:votre-utilisateur/mon-projet.git\n\n# Envoyer sur GitHub\ngit push -u origin main\n```\n\n---\n\n### Commandes Git essentielles\n\nPour la documentation complète et toujours à jour : [https://git-scm.com/docs](https://git-scm.com/docs)\n\n#### Initialiser et cloner\n\n```bash\n# Initialiser un dépôt dans le dossier courant\ngit init\n\n# Cloner un dépôt distant\ngit clone https://github.com/utilisateur/depot.git\n\n# Cloner dans un dossier avec un nom spécifique\ngit clone https://github.com/utilisateur/depot.git mon-dossier\n```\n\n#### Etat et historique\n\n```bash\n# Voir l'état du dépôt (fichiers modifiés, staged, etc.)\ngit status\n\n# Voir l'historique des commits\ngit log\n\n# Voir l'historique de façon compacte\ngit log --oneline\n\n# Voir l'historique avec représentation graphique des branches\ngit log --oneline --graph --all\n\n# Voir les différences entre le working directory et le staging\ngit diff\n\n# Voir les différences pour les fichiers staged\ngit diff --staged\n```\n\n#### Ajouter et commiter\n\n```bash\n# Ajouter un fichier au staging\ngit add nom-du-fichier.txt\n\n# Ajouter tous les fichiers modifiés\ngit add .\n\n# Créer un commit\ngit commit -m \"message de commit\"\n\n# Ajouter et commiter en une commande (fichiers déjà trackés uniquement)\ngit commit -am \"message de commit\"\n\n# Modifier le message du dernier commit (avant push uniquement)\ngit commit --amend -m \"nouveau message\"\n```\n\n#### Branches\n\n```bash\n# Lister les branches locales\ngit branch\n\n# Lister toutes les branches (locales et distantes)\ngit branch -a\n\n# Créer une nouvelle branche\ngit branch nom-de-branche\n\n# Passer sur une branche existante\ngit checkout nom-de-branche\n\n# Créer une branche et y passer directement (recommandé)\ngit checkout -b nom-de-branche\n\n# Méthode moderne (Git 2.23+)\ngit switch -c nom-de-branche\n\n# Supprimer une branche locale\ngit branch -d nom-de-branche\n\n# Forcer la suppression d'une branche locale\ngit branch -D nom-de-branche\n```\n\n#### Synchroniser avec le dépôt distant\n\n```bash\n# Récupérer les changements distants sans fusionner\ngit fetch\n\n# Récupérer et fusionner les changements distants\ngit pull\n\n# Envoyer les commits sur le dépôt distant\ngit push\n\n# Premier push d'une branche\ngit push -u origin nom-de-branche\n\n# Supprimer une branche distante\ngit push origin --delete nom-de-branche\n```\n\n#### Fusionner et rebaser\n\n```bash\n# Fusionner une branche dans la branche courante\ngit merge nom-de-branche\n\n# Rebaser la branche courante sur une autre\ngit rebase main\n\n# Annuler un merge en cours\ngit merge --abort\n\n# Annuler un rebase en cours\ngit rebase --abort\n```\n\n#### Stash (remiser temporairement)\n\n```bash\n# Mettre de côté les modifications en cours\ngit stash\n\n# Lister les stash\ngit stash list\n\n# Réappliquer le dernier stash\ngit stash pop\n\n# Réappliquer sans supprimer le stash\ngit stash apply\n```\n\n#### Tags\n\n```bash\n# Créer un tag sur le commit courant\ngit tag v1.0.0\n\n# Créer un tag annoté (recommandé pour les releases)\ngit tag -a v1.0.0 -m \"Version 1.0.0\"\n\n# Lister les tags\ngit tag\n\n# Pousser les tags vers GitHub\ngit push origin --tags\n```\n\n#### Revenir en arrière\n\n```bash\n# Désindexer un fichier (enlever du staging)\ngit reset HEAD nom-du-fichier.txt\n\n# Annuler les modifications d'un fichier (revenir à la version committée)\ngit checkout -- nom-du-fichier.txt\n\n# Revenir au commit précédent (sans effacer l'historique)\ngit revert HEAD\n\n# Réinitialiser au commit d'un certain hash (dangereux, modifie l'historique)\ngit reset --hard abc1234\n```\n\n---\n\n### Branches et workflow\n\n#### Le modèle Git Flow\n\nGit Flow est une convention d'organisation des branches qui structure le travail en équipe. Ce n'est pas une obligation, mais c'est une bonne référence pour les projets professionnels.\n\n| Branche | Rôle |\n|---|---|\n| `main` | Version stable en production |\n| `develop` | Développement en cours, intégration |\n| `feature/nom` | Développement d'une nouvelle fonctionnalité |\n| `fix/nom` | Correction de bug |\n| `hotfix/nom` | Correction urgente en production |\n| `release/1.0.0` | Préparation d'une version |\n\n#### Workflow type pour une fonctionnalité\n\n```bash\n# Partir toujours depuis develop à jour\ngit checkout develop\ngit pull\n\n# Créer la branche de fonctionnalité\ngit checkout -b feature/ma-fonctionnalite\n\n# ... travailler, commiter ...\n\n# Mettre à jour par rapport à develop avant de merger\ngit fetch origin\ngit rebase origin/develop\n\n# Ouvrir une Pull Request sur GitHub depuis feature/ma-fonctionnalite vers develop\n```\n\n#### Pull Requests\n\nUne Pull Request (PR) est une demande d'intégration de votre branche dans une autre. C'est le coeur du travail collaboratif sur GitHub. Elle permet à l'équipe de relire le code, de faire des commentaires, et de valider les changements avant qu'ils n'arrivent sur la branche principale.\n\n**Bonnes pratiques pour une Pull Request :**\n\n- Donner un titre clair et descriptif\n- Décrire ce que fait le changement et pourquoi\n- Référencer les issues liées avec `Closes #42` ou `Fixes #42`\n- Garder la PR aussi petite et ciblée que possible\n- Répondre aux commentaires de revue de façon constructive\n\n---\n\n### Messages de commit\n\nUn bon message de commit explique clairement ce qui a été fait et pourquoi. La convention la plus répandue est **Conventional Commits** : [https://www.conventionalcommits.org/fr/](https://www.conventionalcommits.org/fr/)\n\n#### Format\n\n```\ntype(scope): description courte\n\nCorps optionnel : explication plus détaillée.\n\nFooter optionnel : références aux issues, breaking changes...\n```\n\n#### Types de commit\n\n| Type | Utilisation |\n|---|---|\n| `feat` | Nouvelle fonctionnalité |\n| `fix` | Correction de bug |\n| `docs` | Modification de documentation |\n| `style` | Formatage, espaces (pas de changement de logique) |\n| `refactor` | Refactoring sans changement de comportement |\n| `test` | Ajout ou modification de tests |\n| `chore` | Tâches de maintenance, dépendances |\n| `perf` | Amélioration de performance |\n| `ci` | Changements liés à l'intégration continue |\n| `build` | Changements de build system |\n| `revert` | Annulation d'un commit précédent |\n\n#### Exemples\n\n```\nfeat(auth): add email verification on registration\n\nfix(api): correct HTTP status code on 404 responses\n\ndocs: update installation steps in README\n\nchore(deps): update dependencies to latest versions\n\nfeat(user): add profile picture upload\n\nCloses #42\n```\n\n---\n\n### GitHub Actions et CI/CD\n\nGitHub Actions est le système d'automatisation intégré à GitHub. Il permet de déclencher des actions automatiques sur des événements (push, pull request, déploiement, etc.).\n\nDocumentation officielle : [https://docs.github.com/fr/actions](https://docs.github.com/fr/actions)\n\n#### Exemple de workflow CI basique\n\nCe fichier doit être placé dans `.github/workflows/ci.yml` :\n\n```yaml\nname: CI\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main, develop ]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout du code\n        uses: actions/checkout@v4\n\n      - name: Configurer Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: '20'\n\n      - name: Installer les dépendances\n        run: npm install\n\n      - name: Lancer les tests\n        run: npm test\n\n      - name: Vérifier le style de code\n        run: npm run lint\n```\n\n#### Exemple pour un projet PHP/Symfony\n\n```yaml\nname: CI PHP\n\non: [push, pull_request]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Configurer PHP\n        uses: shivammathur/setup-php@v2\n        with:\n          php-version: '8.3'\n\n      - name: Installer les dépendances Composer\n        run: composer install\n\n      - name: Lancer PHPStan\n        run: vendor/bin/phpstan analyse\n\n      - name: Lancer les tests PHPUnit\n        run: vendor/bin/phpunit\n```\n\n#### Principaux déclencheurs (triggers)\n\n| Déclencheur | Description |\n|---|---|\n| `push` | A chaque push sur une branche |\n| `pull_request` | A l'ouverture ou la mise à jour d'une PR |\n| `schedule` | Selon un planning cron |\n| `workflow_dispatch` | Déclenchement manuel |\n| `release` | A la création d'une release |\n\n---\n\n### Contribuer à un projet open source\n\nL'open source est au coeur de l'écosystème du développement. Contribuer à un projet existant est une excellente façon d'apprendre, de se faire connaître et de donner en retour à la communauté.\n\nGuide officiel GitHub sur les contributions : [https://docs.github.com/fr/get-started/exploring-projects-on-github/contributing-to-a-project](https://docs.github.com/fr/get-started/exploring-projects-on-github/contributing-to-a-project)\n\n#### Etapes pour contribuer\n\n**1. Trouver un projet**\n\n- Parcourez [https://github.com/explore](https://github.com/explore)\n- Cherchez des issues labelisées `good first issue` ou `help wanted`\n- Consultez [https://goodfirstissue.dev/](https://goodfirstissue.dev/)\n- Consultez [https://up-for-grabs.net/](https://up-for-grabs.net/)\n\n**2. Forker le dépôt**\n\nLe fork crée une copie du dépôt sur votre compte GitHub. Cliquez sur le bouton \"Fork\" en haut à droite de la page du projet.\n\n**3. Cloner votre fork**\n\n```bash\ngit clone git@github.com:votre-utilisateur/le-projet.git\ncd le-projet\n```\n\n**4. Ajouter le dépôt original comme remote**\n\n```bash\ngit remote add upstream git@github.com:auteur-original/le-projet.git\n```\n\n**5. Créer une branche pour votre contribution**\n\n```bash\ngit checkout -b feature/ma-contribution\n```\n\n**6. Faire vos modifications et commiter**\n\n```bash\ngit add .\ngit commit -m \"feat: add my contribution\"\n```\n\n**7. Mettre à jour votre fork avec les dernières modifications de l'original**\n\n```bash\ngit fetch upstream\ngit rebase upstream/main\n```\n\n**8. Pousser et ouvrir une Pull Request**\n\n```bash\ngit push origin feature/ma-contribution\n```\n\nEnsuite allez sur GitHub et ouvrez une Pull Request depuis votre branche vers la branche principale du projet original.\n\n**9. Répondre aux retours**\n\nLe mainteneur du projet relira votre code et pourra demander des modifications. Restez ouvert aux retours, c'est normal et constructif.\n\n#### Points d'attention\n\n- Lisez toujours le fichier `CONTRIBUTING.md` avant de commencer\n- Vérifiez qu'il n'existe pas déjà une issue ou une PR pour ce que vous voulez faire\n- Respectez le style de code du projet\n- Ecrivez des tests si le projet en a\n- Soyez patient : les mainteneurs sont souvent bénévoles\n\n---\n\n### Fichiers importants d'un dépôt\n\n| Fichier | Rôle | Obligatoire |\n|---|---|---|\n| `README.md` | Présentation du projet | Fortement recommandé |\n| `LICENSE` | Licence d'utilisation | Oui pour l'open source |\n| `CONTRIBUTING.md` | Guide de contribution | Recommandé |\n| `CHANGELOG.md` | Historique des versions | Recommandé |\n| `SECURITY.md` | Comment signaler une faille | Recommandé |\n| `CODE_OF_CONDUCT.md` | Règles de comportement | Recommandé |\n| `.gitignore` | Fichiers ignorés par Git | Oui |\n| `.editorconfig` | Config de l'éditeur pour tous | Optionnel |\n\n#### Les licences les plus courantes\n\n| Licence | Utilisation | Lien |\n|---|---|---|\n| MIT | Très permissive, usage libre | [opensource.org/licenses/MIT](https://opensource.org/licenses/MIT) |\n| Apache 2.0 | Permissive, mention de brevets | [apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) |\n| GPL v3 | Copyleft, le code dérivé doit rester libre | [gnu.org/licenses/gpl-3.0](https://www.gnu.org/licenses/gpl-3.0.html) |\n| AGPL v3 | Comme GPL mais aussi pour les services web | [gnu.org/licenses/agpl-3.0](https://www.gnu.org/licenses/agpl-3.0.html) |\n| LGPL | Permissive pour les bibliothèques | [gnu.org/licenses/lgpl-3.0](https://www.gnu.org/licenses/lgpl-3.0.html) |\n| ISC | Similaire à MIT, très courte | [opensource.org/licenses/ISC](https://opensource.org/licenses/ISC) |\n\nOutil pour choisir une licence : [https://choosealicense.com/](https://choosealicense.com/)\n\n---\n\n### Badges GitHub\n\nLes badges sont de petites images affichées dans le README. Ils communiquent des informations importantes en un coup d'oeil : statut de build, version, licence, couverture de tests...\n\nGénérateur de badges : [https://shields.io/](https://shields.io/)\n\n#### Badges courants\n\n```markdown\n# Statut de CI\n[![CI](https://github.com/utilisateur/depot/actions/workflows/ci.yml/badge.svg)](https://github.com/utilisateur/depot/actions)\n\n# Licence\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n# Version\n[![Version](https://img.shields.io/badge/version-1.0.0-blue)](https://github.com/utilisateur/depot/releases)\n\n# Couverture de tests\n[![Coverage](https://img.shields.io/codecov/c/github/utilisateur/depot)](https://codecov.io/gh/utilisateur/depot)\n\n# PRs bienvenues\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)\n\n# Stars GitHub\n[![GitHub stars](https://img.shields.io/github/stars/utilisateur/depot?style=social)](https://github.com/utilisateur/depot/stargazers)\n\n# Dernière version publiée\n[![GitHub release](https://img.shields.io/github/v/release/utilisateur/depot)](https://github.com/utilisateur/depot/releases)\n\n# Dernier commit\n[![GitHub last commit](https://img.shields.io/github/last-commit/utilisateur/depot)](https://github.com/utilisateur/depot/commits/main)\n```\n\n---\n\n### Ressources et liens\n\n#### Documentation officielle\n\n- Documentation GitHub (EN) : [https://docs.github.com/en](https://docs.github.com/en)\n- Documentation GitHub (FR) : [https://docs.github.com/fr](https://docs.github.com/fr)\n- Documentation Git officielle : [https://git-scm.com/doc](https://git-scm.com/doc)\n- Pro Git (livre libre en FR) : [https://git-scm.com/book/fr/v2](https://git-scm.com/book/fr/v2)\n\n#### Syntaxe Markdown\n\n- GitHub Markdown (EN) : [https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax)\n- GitHub Markdown (FR) : [https://docs.github.com/fr/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax](https://docs.github.com/fr/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax)\n- Référence Markdown complète : [https://www.markdownguide.org/](https://www.markdownguide.org/)\n\n#### Apprendre Git de façon interactive\n\n- Apprendre Git dans le navigateur : [https://learngitbranching.js.org/?locale=fr_FR](https://learngitbranching.js.org/?locale=fr_FR)\n- GitHub Skills : [https://skills.github.com/](https://skills.github.com/)\n- Git Immersion : [https://gitimmersion.com/](https://gitimmersion.com/)\n\n#### Conventions et bonnes pratiques\n\n- Conventional Commits : [https://www.conventionalcommits.org/fr/](https://www.conventionalcommits.org/fr/)\n- Git Flow : [https://nvie.com/posts/a-successful-git-branching-model/](https://nvie.com/posts/a-successful-git-branching-model/)\n- GitHub Flow : [https://docs.github.com/fr/get-started/using-github/github-flow](https://docs.github.com/fr/get-started/using-github/github-flow)\n- Trunk Based Development : [https://trunkbaseddevelopment.com/](https://trunkbaseddevelopment.com/)\n- Semantic Versioning : [https://semver.org/lang/fr/](https://semver.org/lang/fr/)\n\n#### Outils utiles\n\n- Générateur de .gitignore : [https://gitignore.io/](https://gitignore.io/) ou [https://www.toptal.com/developers/gitignore](https://www.toptal.com/developers/gitignore)\n- Choisir une licence : [https://choosealicense.com/](https://choosealicense.com/)\n- Générateur de badges : [https://shields.io/](https://shields.io/)\n- GitHub CLI : [https://cli.github.com/](https://cli.github.com/)\n- GitKraken (GUI Git) : [https://www.gitkraken.com/](https://www.gitkraken.com/)\n- GitHub Desktop : [https://desktop.github.com/](https://desktop.github.com/)\n- Résolution de conflits visuels : [https://code.visualstudio.com/docs/sourcecontrol/overview](https://code.visualstudio.com/docs/sourcecontrol/overview)\n\n#### Trouver des projets open source pour contribuer\n\n- GitHub Explore : [https://github.com/explore](https://github.com/explore)\n- Good First Issues : [https://goodfirstissue.dev/](https://goodfirstissue.dev/)\n- Up For Grabs : [https://up-for-grabs.net/](https://up-for-grabs.net/)\n- First Timers Only : [https://www.firsttimersonly.com/](https://www.firsttimersonly.com/)\n- Open Source Guide : [https://opensource.guide/fr/](https://opensource.guide/fr/)\n\n#### Sécurité\n\n- GitHub Security : [https://docs.github.com/fr/code-security](https://docs.github.com/fr/code-security)\n- Dependabot : [https://docs.github.com/fr/code-security/dependabot](https://docs.github.com/fr/code-security/dependabot)\n\n---\n\n### Lexique Git et GitHub\n\n| Terme | Définition |\n|---|---|\n| **Repository (dépôt)** | Espace de stockage contenant tout le code et l'historique d'un projet |\n| **Clone** | Copie locale complète d'un dépôt distant |\n| **Fork** | Copie d'un dépôt sur son propre compte GitHub |\n| **Branch (branche)** | Version parallèle du code permettant de travailler sans affecter la branche principale |\n| **Commit** | Enregistrement d'un ensemble de modifications dans l'historique |\n| **Staging (index)** | Zone intermédiaire où l'on prépare les fichiers avant de commiter |\n| **Push** | Envoi des commits locaux vers le dépôt distant |\n| **Pull** | Récupération et fusion des commits distants en local |\n| **Fetch** | Récupération des commits distants sans fusion |\n| **Merge** | Fusion de deux branches |\n| **Rebase** | Réécriture de l'historique pour intégrer des modifications d'une autre branche |\n| **Pull Request (PR)** | Demande d'intégration d'une branche dans une autre, avec revue de code |\n| **Issue** | Ticket signalant un bug, une idée ou une tâche |\n| **README** | Fichier de présentation principal d'un dépôt |\n| **CONTRIBUTING** | Fichier expliquant comment contribuer au projet |\n| **LICENSE** | Fichier définissant les droits d'utilisation du code |\n| **CI/CD** | Intégration Continue / Déploiement Continu, automatisation du cycle de développement |\n| **GitHub Actions** | Système d'automatisation intégré à GitHub |\n| **Workflow** | Fichier YAML définissant une automatisation GitHub Actions |\n| **Tag** | Marqueur sur un commit, souvent utilisé pour les versions (v1.0.0) |\n| **Release** | Publication officielle d'une version d'un projet sur GitHub |\n| **Stash** | Sauvegarde temporaire de modifications non commitées |\n| **Conflict** | Situation où deux branches ont modifié le même endroit d'un fichier |\n| **Remote** | Dépôt distant (par opposition au dépôt local) |\n| **Origin** | Nom conventionnel du remote principal (votre fork ou dépôt) |\n| **Upstream** | Nom conventionnel du dépôt original quand on travaille sur un fork |\n| **HEAD** | Pointeur indiquant le commit courant |\n| **Gitignore** | Fichier listant les patterns de fichiers à ne pas tracker avec Git |\n| **Semantic Versioning** | Convention de numérotation de version : MAJEUR.MINEUR.PATCH |\n| **Open Source** | Logiciel dont le code source est disponible publiquement |\n| **Maintainer** | Personne responsable de la maintenance d'un projet open source |\n\n---\n\n### FAQ Français\n\n**Q : Quelle est la différence entre `git pull` et `git fetch` ?**\n\n`git fetch` télécharge les nouvelles données du dépôt distant mais ne les fusionne pas dans votre branche locale. `git pull` fait la même chose mais fusionne automatiquement. En pratique, `git fetch` suivi de `git rebase` est souvent préféré car il donne plus de contrôle.\n\n**Q : Je me suis trompé dans mon dernier message de commit, comment le corriger ?**\n\nSi vous n'avez pas encore poussé le commit, utilisez `git commit --amend -m \"nouveau message\"`. Si vous avez déjà poussé, c'est plus délicat car cela modifie l'historique. Il vaut mieux créer un nouveau commit correctif dans ce cas.\n\n**Q : Comment annuler un commit qui a déjà été poussé ?**\n\nUtilisez `git revert HEAD` pour créer un nouveau commit qui annule le précédent, sans modifier l'historique. C'est la méthode sûre. Evitez `git reset --hard` sur des commits déjà partagés avec d'autres personnes.\n\n**Q : Que faire quand j'ai un conflit lors d'un merge ?**\n\nGit marque les conflits dans les fichiers avec des indicateurs `\u003c\u003c\u003c\u003c\u003c\u003c\u003c`, `=======`, `\u003e\u003e\u003e\u003e\u003e\u003e\u003e`. Ouvrez les fichiers concernés, choisissez quelle version garder (ou combinez les deux), supprimez les marqueurs, puis faites `git add` et `git commit` pour finaliser la fusion. Visual Studio Code dispose d'un bon outil visuel pour résoudre les conflits.\n\n**Q : Faut-il commiter le dossier `node_modules/` ?**\n\nNon, jamais. Le dossier `node_modules/` contient les dépendances et peut peser plusieurs centaines de mégaoctets. Il doit être dans le `.gitignore`. Les dépendances se réinstallent avec `npm install` à partir du fichier `package.json`.\n\n**Q : Quelle est la différence entre un fork et un clone ?**\n\nUn fork est une copie d'un dépôt sur votre compte GitHub (côté serveur). Un clone est une copie locale sur votre ordinateur. Pour contribuer à un projet dont vous n'êtes pas collaborateur, vous forkez d'abord le dépôt sur GitHub, puis vous clonez votre fork localement.\n\n**Q : Quand utiliser `merge` vs `rebase` ?**\n\n`merge` préserve l'historique complet et est plus sûr pour les branches partagées. `rebase` réécrit l'historique pour le rendre plus linéaire et lisible, mais ne doit pas être utilisé sur des branches partagées avec d'autres. Pour les branches personnelles de fonctionnalité, `rebase` est souvent préféré. Pour les merges de PR sur main, les deux sont valides selon la convention du projet.\n\n**Q : Comment savoir quelle branche est la branche principale ?**\n\nSur GitHub, la branche principale est indiquée dans les paramètres du dépôt et visible sur la page d'accueil. Historiquement nommée `master`, elle est aujourd'hui souvent renommée `main`. Sur votre dépôt local : `git branch -a` vous liste toutes les branches.\n\n**Q : Comment créer une release GitHub ?**\n\nAllez dans l'onglet \"Releases\" de votre dépôt, cliquez sur \"Create a new release\", choisissez ou créez un tag (ex : `v1.0.0`), ajoutez un titre et une description, puis publiez.\n\n**Q : Peut-on travailler avec Git sans ligne de commande ?**\n\nOui. GitHub Desktop ([https://desktop.github.com/](https://desktop.github.com/)) offre une interface graphique complète. Visual Studio Code intègre aussi un panneau Git. GitKraken ([https://www.gitkraken.com/](https://www.gitkraken.com/)) est une autre option populaire.\n\n---\n\n---\n\n## English Version\n\n---\n\n### About this guide\n\nThis guide is aimed at people who are new to programming, first-year development students, and anyone who wants to understand Git and GitHub in a practical and progressive way. No prior knowledge is required to get started.\n\nGit is a version control tool. GitHub is an online platform that hosts Git repositories. The two are not the same thing, but they work together. This guide explains how to use them effectively, from installation to professional practices.\n\nVisual cheat sheet (image) available in this repository :\n\n![GitHub Cheat Sheet](img/GitHub-Cheat-Sheet-IMG-FR.jpg)\n\nDownloadable PDF cheat sheet : [Git-Cheat-Sheet_FR.pdf](Git-Cheat-Sheet_FR.pdf)\n\n---\n\n### Prerequisites\n\nBefore starting, you need :\n\n- A free GitHub account : [https://github.com/join](https://github.com/join)\n- Git installed on your machine : [https://git-scm.com/downloads](https://git-scm.com/downloads)\n- A terminal (command prompt, PowerShell, bash, zsh...)\n- A code editor (Visual Studio Code is recommended for beginners) : [https://code.visualstudio.com/](https://code.visualstudio.com/)\n\n---\n\n### Understanding Git and GitHub\n\n**Git** is open-source software installed locally on your computer. It allows you to track the history of your files, work on multiple versions in parallel, and roll back changes if needed.\n\n**GitHub** is a website that hosts your Git repositories online. It allows you to collaborate with other people, make your code public or private, and use tools like Issues, Pull Requests, and GitHub Actions.\n\n| Concept | Git | GitHub |\n|---|---|---|\n| Type | Local software | Online platform |\n| Role | Version management | Hosting and collaboration |\n| Works without internet | Yes | No |\n| Free | Yes | Yes (with paid options) |\n\n**Other alternatives to GitHub** (if you are curious) :\n\n- [GitLab](https://gitlab.com/) : similar to GitHub, widely used in enterprise\n- [Bitbucket](https://bitbucket.org/) : often used with Atlassian tools\n\n---\n\n### Installation and configuration\n\n#### Installing Git\n\nGo to [https://git-scm.com/downloads](https://git-scm.com/downloads) and download the version matching your operating system (Windows, macOS, Linux).\n\nVerify the installation by opening a terminal and typing :\n\n```bash\ngit --version\n```\n\nYou should see something like `git version 2.43.0`.\n\n#### Configuring your identity\n\nBefore using Git, you need to set your name and email address. This information will appear in every commit you create.\n\n```bash\ngit config --global user.name \"Your Name\"\ngit config --global user.email \"your@email.com\"\n```\n\n#### Setting the default editor (optional)\n\n```bash\n# Use Visual Studio Code as Git editor\ngit config --global core.editor \"code --wait\"\n\n# Use nano (simpler in terminal)\ngit config --global core.editor \"nano\"\n```\n\n#### Check your configuration\n\n```bash\ngit config --list\n```\n\n#### Configure SSH authentication (recommended)\n\nSSH authentication is more secure and convenient than using a password. It avoids entering your credentials on every operation.\n\n```bash\n# Generate an SSH key\nssh-keygen -t ed25519 -C \"your@email.com\"\n\n# Display the public key to copy into GitHub\ncat ~/.ssh/id_ed25519.pub\n```\n\nThen go to GitHub \u003e Settings \u003e SSH and GPG keys \u003e New SSH key and paste your key.\n\nOfficial SSH documentation : [https://docs.github.com/en/authentication/connecting-to-github-with-ssh](https://docs.github.com/en/authentication/connecting-to-github-with-ssh)\n\n---\n\n### Professional repository structure\n\nA good repository structure makes it easier to read, maintain, and collaborate. Here is the recommended structure, used in the majority of professional projects :\n\n```\nmy-project/\n├── .github/\n│   ├── workflows/            # GitHub Actions files (CI/CD)\n│   │   └── ci.yml\n│   ├── ISSUE_TEMPLATE/\n│   │   ├── bug_report.md\n│   │   └── feature_request.md\n│   └── PULL_REQUEST_TEMPLATE.md\n├── docs/                     # Detailed documentation\n│   └── architecture.md\n├── src/                      # Main source code\n│   ├── main/                 # Production code\n│   └── test/                 # Automated tests\n├── scripts/                  # Utility scripts\n├── img/                      # Project images (screenshots, logos, cheat sheets...)\n├── build/                    # Build files (often in .gitignore)\n├── dist/                     # Distributable files (optional)\n├── .gitignore                # Files to ignore in Git\n├── .editorconfig             # Editor configuration\n├── LICENSE                   # Project license\n├── README.md                 # Main presentation file\n├── CONTRIBUTING.md           # Contribution guide\n├── CHANGELOG.md              # Version history\n├── SECURITY.md               # Security policy\n└── CODE_OF_CONDUCT.md        # Code of conduct\n```\n\n#### Role of each element\n\n**The .github/ folder**\n\nThis folder is automatically recognized by GitHub. It contains configuration specific to the platform. The `workflows/` subfolder contains automations (CI/CD). The `ISSUE_TEMPLATE/` subfolder contains issue templates. The `PULL_REQUEST_TEMPLATE.md` file is the template displayed when someone opens a Pull Request.\n\n**The docs/ folder**\n\nDetailed project documentation : architecture, technical decisions, usage guides, specifications. This folder can also feed GitHub Pages to generate a static website.\n\n**The src/ folder**\n\nThe application source code. It is common practice to separate `main/` (production code) and `test/` (tests).\n\n**The scripts/ folder**\n\nAutomation, deployment, analysis, or maintenance scripts.\n\n**Root files**\n\nThese files are placed at the root because GitHub recognizes and displays them automatically.\n\n---\n\n### Creating structure from the GitHub web interface\n\nThis method is ideal if you are just starting out or do not yet have Git installed locally.\n\n#### Step 1 : Create a new repository\n\n1. Go to [https://github.com/new](https://github.com/new)\n2. Fill in the repository name\n3. Add a short description\n4. Choose Public or Private\n5. Check \"Add a README file\"\n6. Choose a `.gitignore` file based on your language\n7. Choose a license (MIT to start with)\n8. Click \"Create repository\"\n\n#### Step 2 : Create files and folders\n\nTo create a file in a folder that does not yet exist, click \"Add file\" \u003e \"Create new file\" and type the path directly with `/`. For example, enter `docs/architecture.md` to create the file `architecture.md` in the `docs/` folder.\n\nGitHub automatically creates intermediate folders.\n\n#### Step 3 : Add a CONTRIBUTING.md file\n\nClick \"Add file\" \u003e \"Create new file\" and name it `CONTRIBUTING.md`.\n\n#### Step 4 : Create issue templates\n\nClick \"Add file\" \u003e \"Create new file\" and enter the path `.github/ISSUE_TEMPLATE/bug_report.md`.\n\n#### Step 5 : Configure GitHub Actions\n\nClick \"Add file\" \u003e \"Create new file\" and enter `.github/workflows/ci.yml`.\n\n#### Step 6 : Configure labels\n\nIn the \"Issues\" tab, click \"Labels\" to manage your labels. Recommended labels :\n\n| Label | Description |\n|---|---|\n| bug | Something is not working |\n| enhancement | New feature |\n| documentation | Documentation improvement |\n| good first issue | Great for a first contribution |\n| help wanted | External help is welcome |\n| question | Information request |\n| wontfix | This issue will not be addressed |\n| duplicate | This issue has already been reported |\n\n---\n\n### Creating structure from the command line\n\n#### Initialize a new project\n\n```bash\n# Create the project folder and enter it\nmkdir my-project\ncd my-project\n\n# Initialize the Git repository\ngit init\n```\n\n#### Create the complete structure in a single command\n\n```bash\nmkdir -p .github/{workflows,ISSUE_TEMPLATE} docs src/{main,test} scripts img build dist\n```\n\n#### Create the base files\n\n```bash\ntouch .gitignore LICENSE README.md CONTRIBUTING.md CHANGELOG.md SECURITY.md CODE_OF_CONDUCT.md\ntouch .github/PULL_REQUEST_TEMPLATE.md\ntouch .github/ISSUE_TEMPLATE/bug_report.md\ntouch .github/ISSUE_TEMPLATE/feature_request.md\ntouch .github/workflows/ci.yml\ntouch docs/architecture.md\n```\n\n#### Create a comprehensive .gitignore\n\n```bash\ncat \u003e .gitignore \u003c\u003c 'EOF'\n# Dependencies\nnode_modules/\nvendor/\n.venv/\n\n# Build\nbuild/\ndist/\n*.class\n*.jar\n*.war\n*.ear\n\n# Logs\n*.log\n*.tmp\n*.swp\n\n# Environment\n.env\n.env.local\n.env.production\n\n# IDE\n.idea/\n*.iml\n.vscode/\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n\n# OS\n.DS_Store\nThumbs.db\n\n# Tests\ncoverage/\n.nyc_output/\nEOF\n```\n\n#### Make the first commit\n\n```bash\n# Stage all files\ngit add .\n\n# Create the first commit\ngit commit -m \"feat: initial project structure\"\n\n# Connect to the GitHub repository (replace with your URL)\ngit remote add origin git@github.com:your-username/my-project.git\n\n# Push to GitHub\ngit push -u origin main\n```\n\n---\n\n### Essential Git commands\n\nFor the complete and always up-to-date documentation : [https://git-scm.com/docs](https://git-scm.com/docs)\n\n#### Initialize and clone\n\n```bash\n# Initialize a repository in the current folder\ngit init\n\n# Clone a remote repository\ngit clone https://github.com/user/repo.git\n\n# Clone into a folder with a specific name\ngit clone https://github.com/user/repo.git my-folder\n```\n\n#### Status and history\n\n```bash\n# View the repository status (modified files, staged, etc.)\ngit status\n\n# View commit history\ngit log\n\n# View history in compact form\ngit log --oneline\n\n# View history with branch graph\ngit log --oneline --graph --all\n\n# View differences between working directory and staging\ngit diff\n\n# View differences for staged files\ngit diff --staged\n```\n\n#### Stage and commit\n\n```bash\n# Add a file to staging\ngit add filename.txt\n\n# Add all modified files\ngit add .\n\n# Create a commit\ngit commit -m \"commit message\"\n\n# Add and commit in one command (tracked files only)\ngit commit -am \"commit message\"\n\n# Amend the last commit message (before push only)\ngit commit --amend -m \"new message\"\n```\n\n#### Branches\n\n```bash\n# List local branches\ngit branch\n\n# List all branches (local and remote)\ngit branch -a\n\n# Create a new branch\ngit branch branch-name\n\n# Switch to an existing branch\ngit checkout branch-name\n\n# Create a branch and switch to it (recommended)\ngit checkout -b branch-name\n\n# Modern way (Git 2.23+)\ngit switch -c branch-name\n\n# Delete a local branch\ngit branch -d branch-name\n\n# Force delete a local branch\ngit branch -D branch-name\n```\n\n#### Synchronize with the remote repository\n\n```bash\n# Fetch remote changes without merging\ngit fetch\n\n# Fetch and merge remote changes\ngit pull\n\n# Push commits to the remote repository\ngit push\n\n# First push of a branch\ngit push -u origin branch-name\n\n# Delete a remote branch\ngit push origin --delete branch-name\n```\n\n#### Merge and rebase\n\n```bash\n# Merge a branch into the current branch\ngit merge branch-name\n\n# Rebase the current branch onto another\ngit rebase main\n\n# Abort an in-progress merge\ngit merge --abort\n\n# Abort an in-progress rebase\ngit rebase --abort\n```\n\n#### Stash (temporarily shelve changes)\n\n```bash\n# Stash current changes\ngit stash\n\n# List stashes\ngit stash list\n\n# Re-apply the latest stash\ngit stash pop\n\n# Re-apply without removing the stash\ngit stash apply\n```\n\n#### Tags\n\n```bash\n# Create a tag on the current commit\ngit tag v1.0.0\n\n# Create an annotated tag (recommended for releases)\ngit tag -a v1.0.0 -m \"Version 1.0.0\"\n\n# List tags\ngit tag\n\n# Push tags to GitHub\ngit push origin --tags\n```\n\n#### Roll back changes\n\n```bash\n# Unstage a file (remove from staging)\ngit reset HEAD filename.txt\n\n# Discard file modifications (restore committed version)\ngit checkout -- filename.txt\n\n# Undo the last commit (without deleting history)\ngit revert HEAD\n\n# Reset to a specific commit hash (dangerous, rewrites history)\ngit reset --hard abc1234\n```\n\n---\n\n### Branches and workflow\n\n#### The Git Flow model\n\nGit Flow is a branching convention that structures teamwork. It is not mandatory, but it is a solid reference for professional projects.\n\n| Branch | Role |\n|---|---|\n| `main` | Stable production version |\n| `develop` | Ongoing development, integration |\n| `feature/name` | Development of a new feature |\n| `fix/name` | Bug fix |\n| `hotfix/name` | Urgent production fix |\n| `release/1.0.0` | Preparing a release |\n\n#### Typical workflow for a feature\n\n```bash\n# Always start from an up-to-date develop branch\ngit checkout develop\ngit pull\n\n# Create the feature branch\ngit checkout -b feature/my-feature\n\n# ... work, commit ...\n\n# Update against develop before merging\ngit fetch origin\ngit rebase origin/develop\n\n# Open a Pull Request on GitHub from feature/my-feature to develop\n```\n\n#### Pull Requests\n\nA Pull Request (PR) is a request to integrate your branch into another one. It is at the heart of collaborative work on GitHub. It allows the team to review the code, leave comments, and validate changes before they reach the main branch.\n\n**Best practices for a Pull Request :**\n\n- Give a clear and descriptive title\n- Describe what the change does and why\n- Reference related issues with `Closes #42` or `Fixes #42`\n- Keep the PR as small and focused as possible\n- Respond to review comments constructively\n\n---\n\n### Commit messages\n\nA good commit message clearly explains what was done and why. The most widespread convention is **Conventional Commits** : [https://www.conventionalcommits.org/en/](https://www.conventionalcommits.org/en/v1.0.0/)\n\n#### Format\n\n```\ntype(scope): short description\n\nOptional body : more detailed explanation.\n\nOptional footer : issue references, breaking changes...\n```\n\n#### Commit types\n\n| Type | Usage |\n|---|---|\n| `feat` | New feature |\n| `fix` | Bug fix |\n| `docs` | Documentation change |\n| `style` | Formatting, spaces (no logic change) |\n| `refactor` | Refactoring without behavior change |\n| `test` | Adding or modifying tests |\n| `chore` | Maintenance tasks, dependencies |\n| `perf` | Performance improvement |\n| `ci` | Changes related to continuous integration |\n| `build` | Build system changes |\n| `revert` | Reverting a previous commit |\n\n#### Examples\n\n```\nfeat(auth): add email verification on registration\n\nfix(api): correct HTTP status code on 404 responses\n\ndocs: update installation steps in README\n\nchore(deps): update dependencies to latest versions\n\nfeat(user): add profile picture upload\n\nCloses #42\n```\n\n---\n\n### GitHub Actions and CI/CD\n\nGitHub Actions is the automation system built into GitHub. It allows you to trigger automatic actions on events (push, pull request, deployment, etc.).\n\nOfficial documentation : [https://docs.github.com/en/actions](https://docs.github.com/en/actions)\n\n#### Basic CI workflow example\n\nThis file must be placed in `.github/workflows/ci.yml` :\n\n```yaml\nname: CI\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main, develop ]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Set up Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: '20'\n\n      - name: Install dependencies\n        run: npm install\n\n      - name: Run tests\n        run: npm test\n\n      - name: Check code style\n        run: npm run lint\n```\n\n#### Example for a PHP/Symfony project\n\n```yaml\nname: CI PHP\n\non: [push, pull_request]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Set up PHP\n        uses: shivammathur/setup-php@v2\n        with:\n          php-version: '8.3'\n\n      - name: Install Composer dependencies\n        run: composer install\n\n      - name: Run PHPStan\n        run: vendor/bin/phpstan analyse\n\n      - name: Run PHPUnit tests\n        run: vendor/bin/phpunit\n```\n\n#### Main triggers\n\n| Trigger | Description |\n|---|---|\n| `push` | On every push to a branch |\n| `pull_request` | When a PR is opened or updated |\n| `schedule` | On a cron schedule |\n| `workflow_dispatch` | Manual trigger |\n| `release` | When a release is created |\n\n---\n\n### Contributing to open source\n\nOpen source is at the heart of the development ecosystem. Contributing to an existing project is an excellent way to learn, build visibility, and give back to the community.\n\nGitHub official guide on contributions : [https://docs.github.com/en/get-started/exploring-projects-on-github/contributing-to-a-project](https://docs.github.com/en/get-started/exploring-projects-on-github/contributing-to-a-project)\n\n#### Steps to contribute\n\n**1. Find a project**\n\n- Browse [https://github.com/explore](https://github.com/explore)\n- Look for issues labeled `good first issue` or `help wanted`\n- Check [https://goodfirstissue.dev/](https://goodfirstissue.dev/)\n- Check [https://up-for-grabs.net/](https://up-for-grabs.net/)\n\n**2. Fork the repository**\n\nThe fork creates a copy of the repository on your GitHub account. Click the \"Fork\" button at the top right of the project page.\n\n**3. Clone your fork**\n\n```bash\ngit clone git@github.com:your-username/the-project.git\ncd the-project\n```\n\n**4. Add the original repository as a remote**\n\n```bash\ngit remote add upstream git@github.com:original-author/the-project.git\n```\n\n**5. Create a branch for your contribution**\n\n```bash\ngit checkout -b feature/my-contribution\n```\n\n**6. Make your changes and commit**\n\n```bash\ngit add .\ngit commit -m \"feat: add my contribution\"\n```\n\n**7. Update your fork with the latest changes from the original**\n\n```bash\ngit fetch upstream\ngit rebase upstream/main\n```\n\n**8. Push and open a Pull Request**\n\n```bash\ngit push origin feature/my-contribution\n```\n\nThen go to GitHub and open a Pull Request from your branch to the original project's main branch.\n\n**9. Respond to feedback**\n\nThe project maintainer will review your code and may request changes. Stay open to feedback, it is normal and constructive.\n\n#### Points to keep in mind\n\n- Always read the `CONTRIBUTING.md` file before starting\n- Check that there is not already an issue or PR for what you want to do\n- Respect the project's code style\n- Write tests if the project has them\n- Be patient : maintainers are often volunteers\n\n---\n\n### Important repository files\n\n| File | Role | Required |\n|---|---|---|\n| `README.md` | Project presentation | Strongly recommended |\n| `LICENSE` | Usage license | Yes for open source |\n| `CONTRIBUTING.md` | Contribution guide | Recommended |\n| `CHANGELOG.md` | Version history | Recommended |\n| `SECURITY.md` | How to report a vulnerability | Recommended |\n| `CODE_OF_CONDUCT.md` | Rules of behavior | Recommended |\n| `.gitignore` | Files ignored by Git | Yes |\n| `.editorconfig` | Editor config for everyone | Optional |\n\n#### Most common licenses\n\n| License | Usage | Link |\n|---|---|---|\n| MIT | Very permissive, free use | [opensource.org/licenses/MIT](https://opensource.org/licenses/MIT) |\n| Apache 2.0 | Permissive, patent mention | [apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) |\n| GPL v3 | Copyleft, derived code must stay free | [gnu.org/licenses/gpl-3.0](https://www.gnu.org/licenses/gpl-3.0.html) |\n| AGPL v3 | Like GPL but also for web services | [gnu.org/licenses/agpl-3.0](https://www.gnu.org/licenses/agpl-3.0.html) |\n| LGPL | Permissive for libraries | [gnu.org/licenses/lgpl-3.0](https://www.gnu.org/licenses/lgpl-3.0.html) |\n| ISC | Similar to MIT, very short | [opensource.org/licenses/ISC](https://opensource.org/licenses/ISC) |\n\nTool to choose a license : [https://choosealicense.com/](https://choosealicense.com/)\n\n---\n\n### GitHub Badges\n\nBadges are small images displayed in the README. They communicate important information at a glance : build status, version, license, test coverage...\n\nBadge generator : [https://shields.io/](https://shields.io/)\n\n#### Common badges\n\n```markdown\n# CI status\n[![CI](https://github.com/user/repo/actions/workflows/ci.yml/badge.svg)](https://github.com/user/repo/actions)\n\n# License\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n# Version\n[![Version](https://img.shields.io/badge/version-1.0.0-blue)](https://github.com/user/repo/releases)\n\n# Test coverage\n[![Coverage](https://img.shields.io/codecov/c/github/user/repo)](https://codecov.io/gh/user/repo)\n\n# PRs welcome\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)\n\n# GitHub stars\n[![GitHub stars](https://img.shields.io/github/stars/user/repo?style=social)](https://github.com/user/repo/stargazers)\n\n# Latest release\n[![GitHub release](https://img.shields.io/github/v/release/user/repo)](https://github.com/user/repo/releases)\n\n# Last commit\n[![GitHub last commit](https://img.shields.io/github/last-commit/user/repo)](https://github.com/user/repo/commits/main)\n```\n\n---\n\n### Resources and links\n\n#### Official documentation\n\n- GitHub documentation (EN) : [https://docs.github.com/en](https://docs.github.com/en)\n- GitHub documentation (FR) : [https://docs.github.com/fr](https://docs.github.com/fr)\n- Official Git documentation : [https://git-scm.com/doc](https://git-scm.com/doc)\n- Pro Git book (free) : [https://git-scm.com/book/en/v2](https://git-scm.com/book/en/v2)\n\n#### Markdown syntax\n\n- GitHub Markdown (EN) : [https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax)\n- GitHub Markdown (FR) : [https://docs.github.com/fr/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax](https://docs.github.com/fr/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax)\n- Full Markdown reference : [https://www.markdownguide.org/](https://www.markdownguide.org/)\n\n#### Learn Git interactively\n\n- Learn Git in the browser : [https://learngitbranching.js.org/](https://learngitbranching.js.org/)\n- GitHub Skills : [https://skills.github.com/](https://skills.github.com/)\n- Git Immersion : [https://gitimmersion.com/](https://gitimmersion.com/)\n\n#### Conventions and best practices\n\n- Conventional Commits : [https://www.conventionalcommits.org/en/v1.0.0/](https://www.conventionalcommits.org/en/v1.0.0/)\n- Git Flow : [https://nvie.com/posts/a-successful-git-branching-model/](https://nvie.com/posts/a-successful-git-branching-model/)\n- GitHub Flow : [https://docs.github.com/en/get-started/using-github/github-flow](https://docs.github.com/en/get-started/using-github/github-flow)\n- Trunk Based Development : [https://trunkbaseddevelopment.com/](https://trunkbaseddevelopment.com/)\n- Semantic Versioning : [https://semver.org/](https://semver.org/)\n\n#### Useful tools\n\n- .gitignore generator : [https://gitignore.io/](https://gitignore.io/) or [https://www.toptal.com/developers/gitignore](https://www.toptal.com/developers/gitignore)\n- Choose a license : [https://choosealicense.com/](https://choosealicense.com/)\n- Badge generator : [https://shields.io/](https://shields.io/)\n- GitHub CLI : [https://cli.github.com/](https://cli.github.com/)\n- GitKraken (Git GUI) : [https://www.gitkraken.com/](https://www.gitkraken.com/)\n- GitHub Desktop : [https://desktop.github.com/](https://desktop.github.com/)\n- VS Code source control : [https://code.visualstudio.com/docs/sourcecontrol/overview](https://code.visualstudio.com/docs/sourcecontrol/overview)\n\n#### Find open source projects to contribute to\n\n- GitHub Explore : [https://github.com/explore](https://github.com/explore)\n- Good First Issues : [https://goodfirstissue.dev/](https://goodfirstissue.dev/)\n- Up For Grabs : [https://up-for-grabs.net/](https://up-for-grabs.net/)\n- First Timers Only : [https://www.firsttimersonly.com/](https://www.firsttimersonly.com/)\n- Open Source Guide : [https://opensource.guide/](https://opensource.guide/)\n\n#### Security\n\n- GitHub Security : [https://docs.github.com/en/code-security](https://docs.github.com/en/code-security)\n- Dependabot : [https://docs.github.com/en/code-security/dependabot](https://docs.github.com/en/code-security/dependabot)\n\n---\n\n### Git and GitHub Glossary\n\n| Term | Definition |\n|---|---|\n| **Repository** | Storage space containing all the code and history of a project |\n| **Clone** | Full local copy of a remote repository |\n| **Fork** | Copy of a repository on your own GitHub account |\n| **Branch** | Parallel version of the code allowing work without affecting the main branch |\n| **Commit** | Record of a set of changes in history |\n| **Staging (index)** | Intermediate area where files are prepared before committing |\n| **Push** | Sending local commits to the remote repository |\n| **Pull** | Fetching and merging remote commits locally |\n| **Fetch** | Fetching remote commits without merging |\n| **Merge** | Merging two branches |\n| **Rebase** | Rewriting history to integrate changes from another branch |\n| **Pull Request (PR)** | Request to integrate a branch into another, with code review |\n| **Issue** | Ticket reporting a bug, idea, or task |\n| **README** | Main presentation file of a repository |\n| **CONTRIBUTING** | File explaining how to contribute to the project |\n| **LICENSE** | File defining the rights to use the code |\n| **CI/CD** | Continuous Integration / Continuous Deployment |\n| **GitHub Actions** | Automation system built into GitHub |\n| **Workflow** | YAML file defining a GitHub Actions automation |\n| **Tag** | Marker on a commit, often used for versions (v1.0.0) |\n| **Release** | Official publication of a project version on GitHub |\n| **Stash** | Temporary save of uncommitted changes |\n| **Conflict** | Situation where two branches modified the same place in a file |\n| **Remote** | Remote repository (as opposed to local repository) |\n| **Origin** | Conventional name for the main remote (your fork or repository) |\n| **Upstream** | Conventional name for the original repository when working on a fork |\n| **HEAD** | Pointer indicating the current commit |\n| **Gitignore** | File listing file patterns not to track with Git |\n| **Semantic Versioning** | Version numbering convention : MAJOR.MINOR.PATCH |\n| **Open Source** | Software whose source code is publicly available |\n| **Maintainer** | Person responsible for maintaining an open source project |\n\n---\n\n### FAQ English\n\n**Q : What is the difference between `git pull` and `git fetch` ?**\n\n`git fetch` downloads new data from the remote repository but does not merge it into your local branch. `git pull` does the same but merges automatically. In practice, `git fetch` followed by `git rebase` is often preferred because it gives more control.\n\n**Q : I made a mistake in my last commit message, how do I fix it ?**\n\nIf you have not pushed the commit yet, use `git commit --amend -m \"new message\"`. If you have already pushed, it is trickier because it rewrites history. It is better to create a new corrective commit in that case.\n\n**Q : How do I undo a commit that has already been pushed ?**\n\nUse `git revert HEAD` to create a new commit that undoes the previous one, without modifying history. This is the safe method. Avoid `git reset --hard` on commits already shared with others.\n\n**Q : What to do when I have a conflict during a merge ?**\n\nGit marks conflicts in files with indicators `\u003c\u003c\u003c\u003c\u003c\u003c\u003c`, `=======`, `\u003e\u003e\u003e\u003e\u003e\u003e\u003e`. Open the affected files, choose which version to keep (or combine both), remove the markers, then do `git add` and `git commit` to finalize the merge. Visual Studio Code has a good visual tool for resolving conflicts.\n\n**Q : Should I commit the `node_modules/` folder ?**\n\nNo, never. The `node_modules/` folder contains dependencies and can weigh several hundred megabytes. It must be in `.gitignore`. Dependencies are reinstalled with `npm install` from the `package.json` file.\n\n**Q : What is the difference between a fork and a clone ?**\n\nA fork is a copy of a repository on your GitHub account (server side). A clone is a local copy on your computer. To contribute to a project you are not a collaborator on, you first fork the repository on GitHub, then clone your fork locally.\n\n**Q : When to use `merge` vs `rebase` ?**\n\n`merge` preserves the full history and is safer for shared branches. `rebase` rewrites history to make it more linear and readable, but should not be used on branches shared with others. For personal feature branches, `rebase` is often preferred. For merging PRs into main, both are valid depending on the project convention.\n\n**Q : How do I know which branch is the main branch ?**\n\nOn GitHub, the main branch is indicated in the repository settings and visible on the home page. Historically named `master`, it is often renamed `main` today. On your local repository : `git branch -a` lists all branches.\n\n**Q : How do I create a GitHub release ?**\n\nGo to the \"Releases\" tab of your repository, click \"Create a new release\", choose or create a tag (e.g., `v1.0.0`), add a title and description, then publish.\n\n**Q : Can I work with Git without the command line ?**\n\nYes. GitHub Desktop ([https://desktop.github.com/](https://desktop.github.com/)) offers a full graphical interface. Visual Studio Code also integrates a Git panel. GitKraken ([https://www.gitkraken.com/](https://www.gitkraken.com/)) is another popular option.\n\n---\n\n## Author\n\nFabien Conéjéro - [https://github.com/madjeek-web](https://github.com/madjeek-web)\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.\n\n##\n\n##\n\n# GitHub Projects - FAQ\n\n---\n\n## Q : What is this ? How does it work, explain simply ?\n\n### What is GitHub Projects ?\n\nIt is a task management tool integrated into GitHub. Imagine a table like Notion or Trello, but directly linked to your code.\n\n### What is it concretely used for ?\n\nWhen you work on a project (alone or in a team), you have a lot of things to manage : bugs to fix, features to add, things in progress... GitHub Projects allows you to follow all of this visually without leaving GitHub.\n\n### How does it work ?\n\nYou create \"issues\" (= tasks, like \"fix the login bug\" or \"add the dark mode button\"), and you organize them in a table. You can filter them (ex : see only bugs), sort them (by priority, by date...), group them (by status : To do / In progress / Done), and add custom fields (priority, deadline, responsible...).\n\n### What you see on your screen\n\nYou have a project with 1 open issue and 0 closed. It is in Private mode (no one else can see it).\n\nIn summary : it is like a professional to-do list for your code. Very useful when your project grows and you do not want to lose track.\n\n---\n\n## Q : Is it private or public ?\n\nBased on what is displayed : Private.\n\nWe can clearly see \"Private\" next to the project name. So only you can see it.\n\n---\n\n## Q : On the web, in public mode, can it also be public ?\n\nYes exactly ! A GitHub project can be :\n\n- Private : only you (or your team) can see it\n- Public : anyone on the internet can view it\n\n\"There aren't any projects yet\" means this person has no public projects visible on their profile. Either they have not created any, or they are all set to private.\n\nIn summary : when you create a project, you choose yourself whether it is public or private.\n\n---\n\n## Q : What is the point of showing things there in public mode ?\n\nTo show your seriousness when you are looking for a job or an internship. A recruiter who visits your GitHub can see not only your code, but also how you organize yourself, how you manage your tasks... it looks professional.\n\nFor open source projects, if other developers contribute to your code, they can see what remains to be done, what is in progress, and organize themselves with you without having to ask you every time.\n\nFor transparency, if you develop a tool used by people, they can follow the progress, see known bugs, know what you plan to add...\n\nIn short, in private mode it is your personal draft, in public mode it is your professional showcase.\n\n---\n\n## Q : Same questions for : Overview, Repositories, Projects, Packages, Stars.\n\nThese are the tabs of your GitHub profile, here is what each one is used for.\n\n### Overview\n\nThis is your main page, what people see first. You can put a presentation of yourself, your stats (commits, contributions...). It is your business card.\n\n### Repositories\n\nThis is where all your code projects are stored. Each \"repo\" = one project (a website, an app, a script...). Public or private, this is where your code lives.\n\n### Projects\n\nWe just talked about it ! These are your task management tables. Linked to your repos to organize your work.\n\n### Packages\n\nThis is more advanced. It allows you to publish libraries or tools that other developers can install and reuse in their own projects. At your level you will probably not use it right away.\n\n### Stars\n\nWhen you find a nice project on GitHub, you can give it a star (like a \"like\"). This tab shows all the projects you have liked, handy for finding them later.\n\nIn summary : Repositories = your code, Projects = your organization, Stars = your favorites, Packages = what you share with the community.\n\n---\n\n## ༄☕︎︎︎ Buy Me A Coffee :\n\n\u003ca href=\"https://donate.stripe.com/3cI6oH1nUgsy8WZdVHgEg00\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\u003cimg src=\"https://github.com/madjeek-web/eventflow/raw/main/Buy_Me _A_Coffee.jpg\" alt=\"Buy Me A Coffee image\" width=\"25%\" height=\"25%\"\u003e\u003c/a\u003e\n\n༄☕︎︎︎ [stripe.com](https://donate.stripe.com/3cI6oH1nUgsy8WZdVHgEg00)\n\n. Thank you for your support\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmadjeek-web%2Fgithub-guide","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmadjeek-web%2Fgithub-guide","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmadjeek-web%2Fgithub-guide/lists"}