[Git] amour et partage de code

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

[=Evil=]

Membre actif
Nov 26, 2011
135
0
922
Paris
www.d-society.fr
Bonsoir mes cher compagnons, aujourd'hui j'ai decider de vous demarrer un tuto sur une technologie particulierement utile dans le dev. Que ce soit solitaire ou en groupe, quelque chose dont une fois maitriser (en grande partie) il en devient un outil indispensable.

J'ai la joie de demarrer aujourd'hui en votre compagnie, un tutoriel sur Git.

Avant de rentrer dans le vif du sujet, je tien a vous informer, que comme am on habitude, je tien a vous faire un sujet un peu plus broder que "tien tu prend ca, tu dezzip, tu clic et voila". Ainsi j'espere non pas vous apprendre a cliquer sur des boutons, mais surtout a vous apprendre reellement quelques choses.
Une autre note que je me permet de vous rajouter, est que je redige (Constament sur clavier Qwerty US et bosse pas mal sur Linux ou avec des OS calibrer sur "anglais US". Du coup, je demande votre clemence par rapport entre autre a la presence de caracteres speciaux (é...) ou de faute (Mais si une trop grosse m'echappe mes plus platte excuse et une rectification sera faite avec toute la volonte qu'il se doit !)



Les points redactions qaborder, entamons donc notre sujet avec le premier chapitre:
Chapter 1 - Pourquoi Git, qu'est ce que c'est ?

Et oui ! Si je veut vous faire comprendre le fonctionnement de cet outils, je ne peut pas le faire sans en vanter les merites et faiblesses ni sans vous expliquer ce dont il s'agit !
on fait pas des crepes sans savoir ce qu'est un oeuf dira-t-on !




Qu'est ce que c'est ?
Git est un gestionnaire de version.
Bon ok, ce n'est pas tres tres clair !
En fait, il s'agit concretement d'un outil, que l'on utilise tout au long d'un projet afin de sauvegarder.
Vous pourriez me dire

Bah, un ctrl+s et c'est fini ?

Oui mais si c'est juste ca ce serais en effet peu utile. Mais c'est bien mieu.
Imaginons que lors de cette sauvegarde vous passiez d'un programme qui fonctionne a un programme qui fait n'importe quoi.

Ben je revien en arriere, et je rectifie ce que j'ai changer. Ou bien je fait un ctrl+z !

Ca peut marcher. Mais imaginions que vous travailler sur plusieurs fichier. Ce qui est tres courant en programmation, et soyez partie rectifer un autre code. puis vous oubliez, vous aller faire autre chose et vous revenez plus tard pour reprendre votre travail.

Ah... La, c'est sur, j'aurais oublier...

Peut etre. Mais Git non.
En fait, git permet (bien utiliser bien entendu) de retourner retrouver du code qui n'est pas dans sa derniere version.
Tenez, pour l'exemple, un ami a moi, a aujourd'hui voulu installer un pilote de clavier pour razer sur son linux.
Il recuperer le Git du pilote, il le compile le blabla. Sauf que impossible de le faire marcher dans sa derniere version.
Qu'est ce qu'il a fait ? Il recupere une version qu'il avait deja reussi a installer une fois et qui marchais.

Oh ! C'est donc un outil qui permet de lister toutes les versions ?

Pas tout a fait...
En fait, c'est un outil qui va en gros sauvegarder tous les changements effectuer sur le code.

Vous pourrez par exemple "discuter avec lui de cette maniere:
vous-Yo, dit moi Git, quels sont les changement apporter au fichier pi.txt?
git: -Bonjour, le fichier pi,txt a ete changer pour la derniere fois le 12/01/2016 a 18h30 par l'utilisateur "aeinstein".
Raison: "Ajout de decimale"
Modification:
ligne 0: 3.141592653589783
======++++++

Oui c'est assez "fat" aux premiers aborts. Mais la on voit toute la beaute de Git.
Il nous dit qui, quoi, pourquoi.
Et ca, quand on travaille a plusieur, ca peut etre tres utile. Meme tout seul.
Je me suis surpris plus d'une fois a comparrer divers "Commit" (cf: plus loin)



Avantages
Bien, maintenant il est temps que je vous dise pourquoi il est bien (ceci est un avis perso, apres tous les gestionnaire de version ont leur avantage et inconveniant et je suis plutot ouvert a la critique !)
  • Multiplateforme, un systeme, windows ou Unix peut permetre de le mettre en place assez facilement !
  • Tres commun, Il est utiliser dans de nombreux traveaux professionnel (Que diriez vous de jeter un oeil aux Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris! ?
  • Plutot facile a utiliser une fois compris
  • Qui a changer quoi et pourquoi ?
  • recherche un mots dans tous les fichiers

Bon cette liste est tres loins d'etre complete.
Vous pouvez toujours avoir plus d'infos Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Je vous encourage fortement a l'utiliser, il ne pourra que vous etre benefique afin de booster votre efficacite.


Bon, je pense qu l'on peut dire avoir fini avec le chapitre 1 et passer au chapitre 2 !


Chapter 2 - Installer Git


Et bien, il est temps de se mettre correctement au travail !
Alors deja installons Git, je vous laisse vous debrouiller un peu, je vous laisse seullement quelques infos par ici:
Oh ! Et faite vous donc un compte sur Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris! sapristi, ca nous sera tres utile !

Dites moi... Il ne serait pas l'heure de passer aux chapitre suivant ?




Chapter 3 - Basic Usage

Et bien nous y voila ! On commence a rentrer dans le vif du sujet !
Nous allons fonctionner entierement dans la console. Ainsi compagnons de windows, je vous demanderais de lancer "Git Bash" et non "Git GUI"

Bouhouhouhouuuu ! Une belle console bien noire !
ensuite sur notre tres cher github, je vous demanderais de faire une "New Repository" a cet endroit, puis en lui donnant un nom.

Ensuite vous arrivez sur cette page (approximativement)
Il y'a a dans l'encadre une url semblable a "http://www.github.com/<pseudo>/<nom repos>.git"
Vous la copier et retournez donc a votre terminal !

Deplacez vous dans un dossier a l'aide de la commande "cd <directory>" (RTFM)
et faite ou bon vous semble cette commande:
Code:
git clone <url precedement copier>

Cela va creer un sous repertoire avec le nom du repos que vois avez creer precedement.
Voila. Il s'agit de votre dossier ou vous allez bosser dorenavant (Pour un projet !)


Pour la suite, on dira que vos fichiers projets sont nommer file1, file2, file3..... et que votre repos se nomme "repos"

La commande
Code:
git status
est une commande permetant d'afficher l'etat actuel de Git.
Il va donc lister en rouges les fichier Non a jour ou qui existent mais ne sont pas ajouter a git.
En vert les fichier pret a etre "commit"

Si apres la creations de vos fichiers vous faite un "git status" vous pourrez voir que aucun fichier n'est en vert.
Ils sont en rouge et appartiennent au groupe "Untracked Files"
Ils faut dire a git que ces fichiers sont a indexes, cela se fait via la commande
Code:
git add file1

Bien entendu vous pouvez toujours mettre plusieurs fichiers !

Apres avoir mis 1 fichier (ici le 1) en refaisant la commande git status on peut voir une difference !

Mais attention ! Le fichier n'est pas encore totalement a git.
On peut comparer cela a l'envoi d'un colis. Ici, le vous avez fermer le colis et lui avez mit un timbre mais il est encore sur la table du salon ! Il faut l'emmenner a la poste pour qu'il soit disponnible.

Bien sur il s'agit d'une image de comparaison !
Ici nous avons simplement pas envoyer les donnes. Essayez de modifier le fichier et vous le verrez repasser en rouge.

pour l'envoyer, il faut effectuer cette commande:

Code:
git commit -m "court message permetant de donner les raisons du changement"


Voila, si vous effectuez un git status, surprise !
Le fichier en vert n'est plus !

Git a compris les changement, et il a enregistrer les donner ajouter sur votre Git Local
Ce que je veut dire c'est que votre git hub n'a pas ete mis a jour, donc si vous perdez le repos, vous perdez tout !


En regle general, les commit se font a l'ajout d'une fonction. Il s'agit en gros d'un ajout de fonctionnalite mineur. D'une correction simple.
L'interet des commits, c'est que quand vous souhaiterez revenir en arriere, vous reviendrez au dernier commit !

Doit on pour autant commit a chaque fois ?
]


Non ! Il y'a deux extremes, ceux qui commitent pour un rien et ceux qui commitent trop rarement.
Ce sont deux extremes dans lesquels il ne faut surtout pas tomber !
Il faut penser a commit assez souvent sinon vous serez embetter si vous souhaitez reprendre un code a un moment T + pi
Il faut pas commit toutes les 15 sec sinon vous serez vite perdu dans vos commit et pour revenir en arriere au bon moment ca risque d'etre infernal !
Dans le juste milieu !



Reprennos mais cette fois vous allez faire ce que je vous demande. C'est pour vous montrer l'etendu du pouvoir des version ;)
  1. Ajoutez les fichiers file2 et file3
  2. Commitez
  3. effectuez un "git ls-files" qui listes tous les fichiers actuels ajoute a git
  4. effacez un fichier via la commande "git rm file2" qui va suprimer le fichier
  5. "git status" vous indiquera prendre en compte l'effacementcommitez
  6. commitez et verifiez l'effacement via "git ls-files"
  7. executez cette commandes: "git reset --hard HEAD^"
  8. Listez les fichiers via git ls-files

ce petit exercice simple vous permet de vous montrer que grace a git vous pouvez recuperer un fichier effacer !
Vous pouvez aussi retrouver un fichier a son etat d'origine.
Refaite par exemple la manip si dessus mais au lieu de supprimier le fichier via git rm editez juste le fichier.


N'oubliez pas de l'add pour que le commit prenne en compte !


Recapitulatif des commandes de base
  • "git clone repos" permet de recuperer un repository (essayez sur Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris! !)
  • "git add" permet a git de prendre en compte des fichier (Ajouter ou mis a jour)
  • "git status" permet de donner l'etat des fichiers (a jour ou pas)
  • "git ls-files" permet de lister les fichier appartenant au commit actuel
  • "git commit -m 'message'" permet de valider une mise a jour du code avec un message complementaire (servez vous en judicieusement)
  • "git log" listes les derniers commit, leur code, qui les a fait, les fichiers concerner et le message.
  • "git reset --hard HEAD^" permet de reinitialiser au commit precedent. Nous etudirons cette commande plus en details plus loin



Chapter 4 - Sync serveur

Ce qu'il y'a de magique avec git, c'est de travailler a plusieurs.
Alors voici le moment ou vous aller syncroniser vos donner avec le serveur.
Ou ! Ca ne va pas etre facile ! Mais ca va etre amusant !
Ou peut etre pas ;)
Bien alors allons y allonzo !


Git permet un fonctionnement en connections direct avec vos coequipiers mais nous n'allons pas voir ca (Car je n'ai aucune idee de comment cela fonctionne ><)
Nous allons travailler avec un serveur central (en l'occurence GitHub ou tout systeme de repos en ligne)

Si nous navigons a travers github sur le repos precedement creer on peut voir qu'il n'y a absolument aucun fichier qui a ete mis sur le serveur. Et bien en fait cela est pas hyper complexe. Pour mettre le dernier commit effectuer il suffis de faire
Code:
git push
apres avoir commit.
Il vous demandera probablement vos identifiant github (Pour s'assurer que ce ne soit pas n'importe qui qui push sur vos repos.

Pour la premiere fois que vous pusher, pusher avec cette commande:
Code:
git push origin master
Les fois suivante "git push" suffi !

Cette commande permet de signifier que l'on va push sur la branche principale.
Je vous expliquerais le fonctionnement des branches un peu plus tard !
Je tien avant tout a faire le point sur le fonctionnement de git et expliquer ce que font concretement nos commandes !

Si vous travailler en groupe, il se peut que vos collegues push du code. Mais le code n'est pas automatiquement telecharger pour ne pas influencer votre code.
pour telecharger la derniere version sur le serveur, executer cette commande:
Code:
git pull
vous pouvez rajouter "-f" pour forcer l'execution de la commande si il y'a un soucis.
Mais faite attention tout de meme a cette commande.



Chapter 5 - le fil rouge sur le bouton rouge, le fil noir....

Bien il est temps de s'expliquer sur comment fonctionne !
En fait si vous faite un
Code:
ls -a
vous pouvez voir qu'il y a un dossier cacher nommer ".git"
Ce dossier est en faite un dossier qui permet la gestion des parametres du repos git
C'est aussi la que sont sauvegarde vos commit.

En parlant de commit qu'est ce que c'est concretement ?
Vous vous rappellez quand on a discuter avec Git au debut de ce tuto ?
vous-Yo, dit moi Git, quels sont les changement apporter au fichier pi.txt?
git: -Bonjour, le fichier pi,txt a ete changer pour la derniere fois le 12/01/2016 a 18h30 par l'utilisateur "aeinstein".
Raison: "Ajout de decimale"
Modification:
ligne 0: 3.141592653589783
======++++++

Et bien, c'est a peu pret vrai en fait.
Je m'explique. A chaque fois que vous lui dite de commit des changement lui ce qu'il fait c'est en fait de sauvegarder ces changement juste ces changement
Git va noter les difference entre la version precedente et la version actuelle.
Dans l'exemple ci dessus il note que des ajouts on ete fait (les +) et qu'une partie du code n'a pas changer (=) il pourrait noter que du code a ete enlever (il le noterais avec des -)

Ca fait enormement de choses a sauvegarder !

Oui et non ! En fait il sauvegarde seulement les changement ce qui permet de limiter la sauvegarde. Voila une raison pour la quelle il ne faut pas commit des que l'on change le moindre truc !
Git a partir de la liste des changement peut donc reconstituer le dernier commit.

Ce qui est genial, c'est que quand vous cloner un repository, vous telecharger ce dossier qui contient tous les commits. Donc l'avantage de git, c'est que chaque clone est une sauvegarde du git !

Tenez, recement, j'ai eu l'occasion de travailler avec quelqu'un qui a decider de supprimer le git pour ne pas que je puisse garder le code car il se barrait. Il ne savais pas reelement utiliser git. Moi si. J'ai beaucoup rigoler avec mes clones.

Ou si vos datas sont effacer par megarde ca peut fonctionner aussi !

Je pense avoir fait l'essentiel dans cette section, je vous propose donc de revoir la commande de reset !



Chapter 6 - last version is: Harder/Better/Faster/Stronger

Bien ! Continuons le cours avec le reset et le grep !

git grep:
la commande git grep est une commande fort utile qui permet de rechercher dans tous les fichier du repos un morceau de texte

Par exemple, imaginons que dans un programme, vous ayez plusieurs sortie en cas d'erreur, mais que toutes doivent afficher le texte "erreur". Quand vous debugerez, par manque de pratique, vous afficherez quelques details en plus par exemple "erreur le fichier ne peut pas etre lu"
Puis a la fin vous avez fini et voulez voir si vous avez remis le code correctement, il vous suffira de taper
Code:
git grep "erreur"
pour voir la liste des fichier qui contiennent ce mot et a quelle ligne.

Cela peut etre tres pratique pour trouver par exemple un appel de fonction ou autre !


git reset
La fonction que nous avons vu precedement deja, permet de naviger dans les commit precedent.
cela peut etre plutot utile si on se rend compte qu'un erreur est survenu dans les derniers commit !

bien etudions la commande que je vous ai deja donner:
Code:
git reset --hard HEAD^
  • git reset: commande de base
  • --hard: indique que l'on retourne tous les fichier a un commit antecedant.
  • HEAD^: code qui defini le commit que l'on veut

On va surtout s'interresser au code du commit.

C'est sympa, mais j'ai aucune idee de comment choisir le bon code...

Oh ! Vous etes encore la ?
Et bien c'est assez simple en fait !
"HEAD" defini le commit actuel
"^" veut signifier -1

donc le code "HEAD^" veut dire "actuel - 1" soit, commit precedent !
Vous pouvez reculer de plusieurs commit en faisant "HEAD^^" ici on fait -2 vu que le -1 est present deux fois. On arrive donc a l'avant dernier !

Si vous voulez reculer de 8 commit, vous pouvez ecrire:
Code:
git reset --hard HEAD^^^^^^^^
Code:
git reset --hard HEAD8^

mais je pense que vous prefererez faire avec cette technique :

  1. Faire un "git log"
  2. reperer le nom du commit (Son nom est une suite de caractere Hexadecimal du genre "405fb56281b6bfd3067903c5e8224b137bcd8229")
  3. faite un git reset --hard <nom du commit>

Cela permet de retourner au commit qui porte le nom choisi.
Vous n'etes pas obliger de taper tout le nom complet, taper les ~8 premiers caracteres suffi en regle generale !




Chapter 7 - Douze Baguettes

Pourquoi ce chapitre porte comme nom "douze baguette"

En fait, il s'agit d'un blague de programmeur, a travers cette blague, je vous fait savoir que le code n'attend pas et qu'il est temps d'aller bosser !
Car on a vu les fonctionnalitees principale de Git !

Et les branches ? tu avait dit que l'on etudierais les branches !
Oui tout a fait ! Mais nous verons ca une prochaine fois ! C'est un peu complexe pour l'aborder comme ca sans aucune forme de pitier.
Toute fois si vous tenez a savoir, le cours sur Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris! a propos de git est tres bien !

Je vous remercie d'avoir lu ce cours et n'hesitez pas a le partager !




C'est la femme d'un programmeur qui va le voir et lui dit:
"Va donc au magasin, prend 2 baguettes, regarde si il y'a des oeufs, si il y'en a prend en douze"
Le programmeur s'en va au magasin, voyant qu'e le magasin dispose d'oeuf, il revient a la maison avec 12 baguettes !
 
Last edited:

Nearyu

Programmeur
V
Sep 25, 2010
6,942
18
944
28
Woauw, c'est bien complet tous ça :o
Bien jouer :p

Moi je dis vive Subversion.... Non je déconne bien-sur :)
GIT est très utilisé pour la gestion de projet et par les entreprise, il est super facile d'utilisation et très complet comme on peut le voir dans le explication d'évil :)