Git Helper

Guide git de l'installation aux commandes usuelles

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Git Helper 
// @namespace    http://tampermonkey.net/
// @version      10.1
// @description  Guide git de l'installation aux commandes usuelles 
// @author       yglsan
// @match        *://*/*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    // Ajout de Bootstrap via CDN pour les styles
    const bootstrapStyle = document.createElement("link");
    bootstrapStyle.href = "https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css";
    bootstrapStyle.rel = "stylesheet";
    document.head.appendChild(bootstrapStyle);

    const gitSections = [
        {
            section: "Commandes essentielles (15 principales)",
            details: [
                {
                    command: "git init",
                    usage: "git init",
                    explanation: "Initialise un nouveau dépôt Git dans le répertoire actuel.",
                    advice: "Utilisez cette commande lorsque vous commencez un nouveau projet Git. Elle est souvent la première commande exécutée dans un nouveau répertoire.",
                    example: "Exemple : `git init` dans le répertoire de votre projet pour initialiser le dépôt."
                },
                {
                    command: "git clone",
                    usage: "git clone [URL_du_dépôt]",
                    explanation: "Clone un dépôt distant sur votre machine locale.",
                    advice: "Utilisez cette commande pour récupérer une copie locale d'un projet existant hébergé sur GitHub, GitLab, etc.",
                    example: "Exemple : `git clone https://github.com/username/repository.git`"
                },
                {
                    command: "git add",
                    usage: "git add [fichier|dossier|.]",
                    explanation: "Ajoute des fichiers ou des modifications à l'index pour préparer un commit.",
                    advice: "Important pour préparer les fichiers à être commités. Vous pouvez utiliser un point `.` pour ajouter tous les fichiers modifiés dans le répertoire.",
                    example: "Exemple : `git add .` pour ajouter tous les fichiers modifiés dans le répertoire."
                },
                {
                    command: "git commit -m",
                    usage: "git commit -m '[message]'",
                    explanation: "Enregistre les changements de l'index dans l'historique avec un message de commit.",
                    advice: "Utilisez des messages clairs et descriptifs pour vos commits. Par exemple, 'Ajout de la fonctionnalité X' ou 'Correction du bug Y'.",
                    example: "Exemple : `git commit -m 'Ajout de la fonctionnalité de recherche'`"
                },
                {
                    command: "git commit -am",
                    usage: "git commit -am '[message]'",
                    explanation: "Effectue un commit en ajoutant tous les fichiers suivis modifiés, sans avoir besoin de `git add`.",
                    advice: "Cette commande est très pratique lorsque vous travaillez fréquemment sur un même fichier ou un groupe de fichiers.",
                    example: "Exemple : `git commit -am 'Correction des bugs'`"
                },
                {
                    command: "git status",
                    usage: "git status",
                    explanation: "Affiche l'état actuel du dépôt, les fichiers modifiés, ajoutés ou non suivis.",
                    advice: "Utilisez `git status` fréquemment pour vérifier l'état de vos fichiers avant de faire un commit ou de pousser vos changements.",
                    example: "Exemple : `git status`"
                },
                {
                    command: "git log",
                    usage: "git log",
                    explanation: "Affiche l'historique des commits dans le dépôt.",
                    advice: "Utilisez `git log --oneline` pour avoir une vue d'ensemble plus concise de l'historique des commits.",
                    example: "Exemple : `git log --oneline`"
                },
                {
                    command: "git branch",
                    usage: "git branch [nom]",
                    explanation: "Crée une nouvelle branche locale.",
                    advice: "Créez des branches pour chaque nouvelle fonctionnalité ou correction de bug afin de maintenir une structure claire de votre code.",
                    example: "Exemple : `git branch feature-xyz`"
                },
                {
                    command: "git checkout",
                    usage: "git checkout [branche|fichier]",
                    explanation: "Bascule vers une autre branche ou restaure un fichier dans son dernier état.",
                    advice: "Utilisez cette commande pour passer d'une branche à l'autre. N'oubliez pas de valider vos modifications avant de changer de branche.",
                    example: "Exemple : `git checkout feature-xyz`"
                },
                {
                    command: "git switch",
                    usage: "git switch [branche]",
                    explanation: "Permet de changer de branche, remplaçant `git checkout` dans ce contexte.",
                    advice: "La commande `git switch` est une alternative plus simple et intuitive à `git checkout` pour le changement de branche.",
                    example: "Exemple : `git switch feature-xyz`"
                },
                {
                    command: "git merge",
                    usage: "git merge [branche]",
                    explanation: "Fusionne les changements de la branche spécifiée dans la branche courante.",
                    advice: "Assurez-vous de tester vos changements localement avant de fusionner, et résolvez les conflits si nécessaire.",
                    example: "Exemple : `git merge feature-xyz`"
                },
                {
                    command: "git push",
                    usage: "git push [remote] [branche]",
                    explanation: "Pousse les commits locaux vers un dépôt distant.",
                    advice: "Utilisez cette commande pour partager vos changements avec d'autres personnes travaillant sur le projet. Assurez-vous que votre branche est à jour avant de pousser.",
                    example: "Exemple : `git push origin main`"
                },
                {
                    command: "git pull",
                    usage: "git pull [remote] [branche]",
                    explanation: "Récupère les modifications du dépôt distant et les fusionne avec la branche courante.",
                    advice: "Avant de pousser vos changements, utilisez `git pull` pour vous assurer que vous travaillez sur la version la plus récente du code.",
                    example: "Exemple : `git pull origin main`"
                },
                {
                    command: "git reset",
                    usage: "git reset [--soft|--hard] [commit]",
                    explanation: "Réinitialise l'index ou la branche actuelle à un état donné. `--hard` efface les modifications locales.",
                    advice: "Utilisez `git reset --soft` pour revenir à un commit précédent tout en conservant les modifications dans votre répertoire de travail.",
                    example: "Exemple : `git reset --hard HEAD~1`"
                },
                {
                    command: "git stash",
                    usage: "git stash",
                    explanation: "Sauvegarde les changements non validés temporairement, permettant de revenir à un état propre.",
                    advice: "Cette commande est utile lorsque vous devez changer de branche sans vouloir valider vos changements en cours.",
                    example: "Exemple : `git stash`"
                }
            ]
        }
    ];

    // Fonction pour installer Git (instructions pour chaque plateforme)
    function getInstallInstructions() {
        return `
        <h4>Installation de Git :</h4>
        <ul>
            <li><b>Windows :</b> Téléchargez Git à partir de <a href="https://git-scm.com/download/win" target="_blank">Git pour Windows</a> et suivez les instructions de l'installateur.</li>
            <li><b>MacOS :</b> Utilisez Homebrew : <code>brew install git</code> ou téléchargez l'installateur à partir de <a href="https://git-scm.com/download/mac" target="_blank">Git pour Mac</a>.</li>
            <li><b>Linux (Ubuntu) :</b> Exécutez <code>sudo apt install git</code> dans le terminal.</li>
            <li><b>Linux (Fedora) :</b> Exécutez <code>sudo dnf install git</code> dans le terminal.</li>
            <li><b>Linux (Arch) :</b> Exécutez <code>sudo pacman -S git</code> dans le terminal.</li>
        </ul>
        <p>Après l'installation, vérifiez que Git est bien installé en exécutant la commande : <code>git --version</code>.</p>
        `;
    }

    // Création du panneau
    const panel = document.createElement("div");
    panel.style.position = "fixed";
    panel.style.bottom = "10px";
    panel.style.right = "10px";
    panel.style.width = "500px";
    panel.style.maxHeight = "80vh";
    panel.style.overflowY = "auto";
    panel.style.backgroundColor = "white";
    panel.style.color = "black";
    panel.style.border = "1px solid #ccc";
    panel.style.borderRadius = "10px";
    panel.style.padding = "20px";
    panel.style.zIndex = "9999";
    panel.style.display = "none"; // initialement caché

    // Contenu du panneau : Recherche et explication
    const title = document.createElement("h3");
    title.textContent = "Git Helper";

    const searchInput = document.createElement("input");
    searchInput.type = "text";
    searchInput.classList.add("form-control");
    searchInput.placeholder = "Recherche par mots clés...";

    const resultsContainer = document.createElement("div");
    resultsContainer.style.marginTop = "10px";

    // bouton pour fermer le panneau
    const closeButton = document.createElement("button");
    closeButton.classList.add("btn", "btn-danger");
    closeButton.textContent = "Fermer l'application";
    closeButton.onclick = function () {
        panel.style.display = "none";
    };

    // bouton pour afficher l'installation de Git
    const installButton = document.createElement("button");
    installButton.classList.add("btn", "btn-info");
    installButton.textContent = "Installation de Git";
    installButton.onclick = function () {
        resultsContainer.innerHTML = getInstallInstructions();
    };

    // bouton pour afficher des explications détaillées
    const explanationButton = document.createElement("button");
    explanationButton.classList.add("btn", "btn-primary");
    explanationButton.textContent = "Afficher les explications";
    explanationButton.onclick = function () {
        resultsContainer.innerHTML = gitSections[0].details.map(command => `
            <div>
                <strong>${command.command}</strong> : ${command.explanation} <br>
                <em>Conseil :</em> ${command.advice}<br>
                <em>Exemple :</em> ${command.example}<br><br>
            </div>
        `).join('');
    };

    panel.appendChild(title);
    panel.appendChild(searchInput);
    panel.appendChild(installButton);
    panel.appendChild(explanationButton);
    panel.appendChild(resultsContainer);
    panel.appendChild(closeButton);

    // panneau
    document.body.appendChild(panel);

    // Fonction de recherche
    function searchCommands(query) {
        const lowerQuery = query.toLowerCase();
        const matches = gitSections[0].details.filter(command => {
            return command.command.toLowerCase().includes(lowerQuery) || command.explanation.toLowerCase().includes(lowerQuery);
        });

        resultsContainer.innerHTML = "";
        matches.forEach(command => {
            const commandElem = document.createElement("div");
            commandElem.innerHTML = `<strong>${command.command}</strong> : ${command.explanation}`;
            resultsContainer.appendChild(commandElem);
        });
    }

    // Event listener pour la recherche
    searchInput.addEventListener("input", function () {
        searchCommands(searchInput.value);
    });

    // Fonction de raccourci clavier pour ouvrir/fermer le panneau
    document.addEventListener("keydown", function (event) {
        if ((event.ctrlKey && event.key === "G") || (event.metaKey && event.key === "G")) {  // Raccourci Ctrl+G ou Cmd+G
            if (panel.style.display === 'none') {
                panel.style.display = 'block';
                explanationButton.click();
            } else {
                panel.style.display = 'none';
            }
        }
    });
})();