Mes débuts avec Git et Github
Git est un système de gestion de version plutôt prévu pour les programmeurs. Github est un site web qui s'appuie sur Git pour permettre un travail en ligne, la publication des résultats et le travail collaboratif.
Des débuts difficiles
J'avais des besoins particulier que nous verrons plus tard, et aucun appétence pour me remettre au codage. Pourtant il faut parfois faire soi-même ce qui n'est pas fait par les autres, ce qui explique que je me sois retrouvé dans cette galère.
Il y a beaucoup de documentation sur Git/Github, le tout est de trouver celle qui vous convient, c'est peut-être celle-ci, ou peut-être une autre, selon vos besoins. Le problème est que, souvent, ce dont vous avez besoin là, maintenant, n'est sans doute pas une liste de cours, mais un conseil à usage immédiat. Vous compléterez au fur et à mesure des besoins.
Les guides de Git sont sûrement une source essentielle. Le menu (Git Guides: Install, Init, Clone, Add, Commit, Remote, Status, Pull, Push est un point de chute à utiliser si vous en sentez le besoin).
Différences entre Git et Github
En pratique, Git est un utilitaire en ligne de commande, que vous allez utiliser sur votre PC, tranquillement chez vous. Github est un service en ligne plus ou moins gratuit qui vous aide à partager votre travail, donc en fait aucun rapport, sinon le fait que Github vous demande d'utiliser aussi Git, le contraire n'étant pas vrai.
Démarrer avec Git
Premier pas
C'est de toutes façon obligatoire, on va donc s'y coller. Je travaille sous Linux (openSUSE 15.2, là), mes exemples ne sont donc valables que pour ce système. Il faut bien sûr installer Git, c'est sûrement disponible dans les dépôts de votre distribution.
Puis vous allez initialiser des paramètres qui ne serviront que pour communiquer avec github. À priori, vous allez utiliser le même nom et le même mail pour les deux projets.
git config --global user.name "votrelogin-github" git config --global user.email "votre email"
Ces valeurs sont sauvegardées dans ~/.gitconfig.
Vous allez maintenant créer sur votre disque, là, où vous voulez, un répertoire github (par exemple).
Une très bonne documentation de Git mais ne vous précipitez pas dessus, vous risquez d'être vite largué :-(.
Dolphin et son interface Git
Je travaille avec Kde et Dolphin. La capacité de Dolphin à avoir dans la même fenêtre un explorateur et un terminal (touche F4) est très commode. Il y a même un plugin git, installez-le et activez-le dans la config de Dolphin. Ce n'est évidemment pas indispensable, juste commode.
Projet uniquement local
Ce qui suit semble nécessaire uniquement si vous n'avez pas et voulez pas de compte Github. Dans le cas contraire passez directement au paragraphe Github.
Si vous voulez programmer des scripts pour faire de la vidéo, et un programme pour gérer un garage, qui n'ont donc rien à voir, vous voulez gérer deux projets au sens ou je l'emploie pour l'instant.
Dans le répertoire github, créez les répertoires projet1 et projet2. Les initialisations qui suivent sont conservées dans un répertoire caché ".git" dans ce répertoire de projet. Un seul .git suffit pour un projet.
Par la suite nous allons étudier projet1, placez vous dans ce répertoire.
Tapez ensuite les commandes suivantes:
echo "#commentaire" >> README.md git init git add README.md git commit -m "first commit"
git init initialise le répertoire projet1. Tous les répertoires qui sont dessous feront partie du même projet. Cela se fait en créant un fichier caché .git pour le projet.
git add accepte comme argument un fichier simple ou un répertoire
Démarrer avec Github
Attention au vocabulaire
Il manque des mots pour exprimer tout ce qu'il y a à comprendre et à voir... Dans l'onglet "Projects" de Github on trouve en fait un planning pour répartir le travail entre les membres d'un groupe de travail. Si vous en êtes là, je ne peux pas vous aider, faute de compétence. Pour moi, un "projet" c'est juste un sujet sur lequel je dois travailler, essentiellement seul... donc , en gros pour moi à un de mes projets correspond un dépôt.
Tout premiers pas
Rien de difficile, on va sur le site web, on crée un compte et on suit les tutos, en particulier "Hello World".
On suit les tutos *très soigneusement*, il est difficile de revenir en arrière si on a pas fait exactement ce qu'il faut. Si on a juste à créer un fichier texte genre "README.md", il n'y a rien de très difficile.
Mais partager avec le monde le contenu de ce fichier n'est pas exaltant... et c'est là que tout se complique.
Effacer un dépôt (repository)
Nous allons effacer ce dépôt. En effet nos essais pourront nous amener à créer et détruire des dépôts souvent, ce sera à éviter en production!
le nom de mon compte est "jdanield", le nom du dépôt est donc jdanield/Hello-world. Cliquez sur Hello-world. Vous arrivez dans l'onglet "code" et vous devez voir votre fichier README.md et son contenu.
Notez que je n'ai pas trouvé comment avoir github en français, mes indications sont donc en anglais.
Vous avez aussi tout à droite des onglets un onglet "settings". Si vous cliquez dessus et que vous descendez tout en bas de la page vous trouvez un cadre rouge "Danger Zone". Dans cette zone, vous avez un bouton "Delete this repository". Cliquez dessus, on va vous demander de recopier dans un cadre le nom complet du dépôt, pour moi danield/Hello-world. Faites-le, validez et votre dépôt est effacé.
Créer notre dépôt
Ça c'est simple, ne vous réjouissez pas trop vite :-)
Cliquez sur votre login, puis sur l'onglet "Repositories". Là dedans il y a un onglet "languages". Ne rêvez pas, on ne vous permet pas de mettre votre dépôt en français. "language", c'est le langage de programmation que vous êtes sensé utiliser. Ne vous en préoccupez pas pour l'instant, Github se débrouille très bien tout seul.
Par contre, cliquez sur "New" et remplissez "Repository name". Pour cet essai, je préfère ne pas dupliquer des noms déjà utilisés, je vais mettre "Repo-projet1". À tout hasard, évitez les caractères non US (accents...). Dans la description, mettez, par exemple "dépôt pour le projet1". À priori, là tous les caractères devraient passer.
N'ajoutez aucun fichier, et cliquez sur "Create repository".
Github vous donne une page très importante, en particulier elle vous indique comme créer votre dépôt Git local. Sauf que ça risque fort de ne pas marcher, il vous faut un mot de passe en plus du login. celui que vous avez choisi pour votre compte Github ne marche pas (ou ne marchera plus dans quelques jours, j'écris ça le 2 juin 2021).
Maintenant, vous pouvez recopier (on dit "cloner") votre configuration Github sur votre disque dur. Ici, la partie la plus utile de la page est le lien vers votre projet, pour moi
https://github.com/jdanield/Repo-projet1.git
Par la suite, cette URL se retrouve dans l'onglet "Code" de votre repository Github.
Créer votre clé d'accès
Pour l'instant j'utilise la méthode https qui est recommandée par Github, qui nécessite un PAT (personal access token) qui sert de mot de passe.
Creating a personal access token.
Vous allez bientôt en avoir besoin. Il est absolument indispensable de recopier ce "pat" dans un endroit sûr, car vous ne pourrez pas le retenir par cœur. Il est possible de le stocker pour qu'il soit utilisé automatiquement, mais à ce stade de mon expérience je ne sais pas encore le faire :-( (3 juin 2021).
Retour à Git
Cloner Github
La façon la plus simple de créer le répertoire voulu sur le disque dur est de le cloner depuis Github. Vous allez donc vous placer dans votre répertoire local github et taper "git clone", suivi de l'adresse que vous a aimablement fourni Github. Utilisez la votre, sinon vous risquez de cloner mon propre répertoire, puisqu'il est public (s'il existe encore quand vous ferez ce tuto):
git clone https://github.com/jdanield/Repo-projet1.git
Ça devrait créer un répertoire Repo-projet1 dans votre répertoire github, contenant, un fichier caché ".git".
On peut utiliser un nom de répertoire local différent en l'ajoutant à la fin, par exemple:
git clone https://github.com/jdanield/Repo-projet1.git Projet1
Premier commit
Vous allez maintenant faire à peu près comme pour la méthode manuelle, sauf que l'init a déjà été faite. Vérifiez d'abord que vous êtes bien dans le répertoire "Repo-projet1", puis:
echo "#commentaire" >> README.md git add README.md git commit -m "first commit"
Si vous avez installé le plugin de Dolphin, un clic droit sur ce fichier vous montre des entrées de menu "Git", par exemple "Git log". Ce dernier donne
Validation Date Message Auteur f0b7547 03-06-2021 first commit jdanield
À peu près ce que vous donne "git log" tapé au clavier (git log utilise less, on en sort en tapant la touche q).
Git add et git commit sont nécessaires pour inscrire votre premier fichier dans la base de données Git. La, ligne echo utilise juste le système pour créer un fichier texte README.md, n'importe quel éditeur peut en faire autant.
Première branche
Git et Github fonctionnent avec des branches, le dépôt Repo-projet1 étant le tronc... La branche initiale peut être "main" ou "master" ou n'importe quel nom. Suivons le tuto initial de Github...
git branch -M main git remote add origin https://github.com/jdanield/Repo-projet1.git git push -u origin main
Et là, sans doute, ça coince. on vous dit "l'origine existe déjà", "remote: Invalid username or password", mauvais mot de passe.
En fait, "origin" est juste un raccourci pour l'adresse complète "https://github.com/jdanield/Repo-projet1.git", et cette adresse ne comporte pas de nom d'usager et de mot de passe.
Pour que le "push" fonctionne, il faut remplacer "origin" par l'adresse complète dans la ligne ci-dessus, avec le pat (personal access token) que vous avez défini plus haut. C'est le seul moyen que j'ai trouvé pour l'instant pour donner le login/mot de passe.
Vous allez donc effacer l'origine incorrecte avec "git remote remove origin", et reprendre avec les commandes correctes:
git remote remove origin git remote add https://jdanield:pat@github.com/jdanield/Repo-projet1.git git push -u origin main
Et là, vous devriez retrouver votre README.md dans Github.
Envoi d'un répertoire
La suite est triviale quand on a compris dans quel ordre il faut le faire. Recopiez dans votre répertoire Repo-projet1 n'importe quel répertoire que vous avez sur votre disque dur (pas trop gros, pas confidentiel!), moi je l'ai fait avec une version de pmwiki, juste parce que je l'avais sous la main.
En suite il faut trois commandes, dans Repo-projet1:
git add pmwiki-2.2.139 git commit -m "commit du répertoire pmwiki (au hasard)" git push -u https://jdanield:pat@github.com/jdanield/Repo-projet1.git main
add
La première ligne dit à git d'ajouter le nouveau répertoire au projet. En anglais ils disent "staging area", zone d'attente? Attention, on peut faire beaucoup de choses avec "git add". Il ne faut ajouter que ce qu'on veut au final avoir en ligne, je ne sais pas trop comment on est sensé faire le tri entre les fichiers qui sont dans le répertoire et doivent être en ligne et ceux qui sont dans le répertoire et ne doivent pas être en ligne...
En cas de doute, lire la page de doc sur "add".
commit
La deuxième (commit) insiste lourdement pour dire que oui, on a fini d'ajouter des choses et qu'il faut les regrouper (?) avec un commentaire.
Git fonctionne comme VirtualBox ou BTRFS avec des "snapshots" ("clichés"). Quand vous faites un commit, vous figez le travail en cours dans un état déterminé, en gardant l'historique de votre travail. Il est plus ou moins possible de supprimer un cliché (avec tout le travail fait depuis!)
push
La troisième (push) envoie tout en ligne sur Github ou vous devriez la retrouver dans la branche main...
Je proposerais d'être prudent avec la gestion des commit et des push. J'ai pas mal galéré dans Virtualbox avec les snapshots: si on installe des choses dans un snapshot, en gros si on fait un comit sur une nouvelle branche, et que par la suite on retravaille la branche d'origine, assembler ("merge") le tout ne doit pas être simple.
Première mise en pratique
Ci-dessous une copie intégrale de mes notes, je n'ai masqué que le "pat".
4 juin 2021, après écriture de la page web... essai de mise en place de pmwiki. https://github.com/jdanield/pmwiki à ce moment il n'y a dans le répertoire pmwiki de Github que le fichier README.md. J'ai effacé toutes les branches sauf master Dans /data/mesdocs-jdd/informatique/github/jdanield/ git clone https://github.com/jdanield/pmwiki.git Ça crée le répertoire pmwiki j'ai mis à jour le README.md pour refléter l'usage réel du dépôt git add README.md git add pmwiki-2.2.139 git commit -m "mise en place de pmwiki-2.2.139" git push -u https://jdanield:pat@github.com/jdanield/pmwiki.git et le dépôt semble en place... je constate que j'ai fait une faute d'orthographe dans le README.md. Je la corrige git add README.md git commit -m "correction d'une typo dans README.md" git push -u https://jdanield:pat@github.com/jdanield/pmwiki.git pour la mettre à jour en ligne...