
Git est un outil incontournable pour l’ingénieur, même non informaticien. Que ce soit pour des logiciels ou des documents issus d’une collaboration, Git s’est imposé comme la norme.
Gitlab/Github sont des serveurs Git qui gèrent le stockage, le partage entre utilisateurs, les autorisations d’accès et puis toute une couche d’outils supplémentaires qui complexifient énormément leur interface. La partie de l’interface juste pour faire du Git est “assez” simple.
Il est important de réaliser que si vous êtes bloqués en git pour quelque raison que ce soit, vous devez consacrer du temps à vous débloquer, en demandant de l’aide, en continuant à vous former, car l’impasse sur git n’est pas possible.
Git est la version la plus utilisée de logiciel de contrôle de version.
Qu’est-ce que le contrôle de version ? Il s’agit de stocker toutes les versions de tous les fichiers dans un projet, avec pour chaque version, des commentaires, dates et auteur.
Git est le logiciel à la mode, mais il y a eu d’autres logiciels de contrôle de version : CVS, SVN, SourceSafe, ClearCase, Mercurial, etc.
Contrairement aux logiciels précédents, qui stockaient les différences entre les versions, Git stocke les versions entières. Le dépôt Git est donc un peu plus gros. Il se trouve dans un dossier .git qui est dans le dossier racine du projet. Il ne faut jamais modifier ce dossier .git ou son contenu.
Les éléments de Git sont :
Les opérations courantes sont :
Suivent les transparents vus dans la video précédente
La boucle de travail de base est:
Commit = créez une copie dans le dépôt GIT avec un
message de documentation
En anglais: repository.
Ce sont les données du système de contrôle de version, c’est à dire au moins toutes les versions de tous les fichiers (ou un moyen de les reconstituer). C’est aussi toutes les informations d’auteur, de temps, de dépendance, de branches…
Un dépôt GIT peut être assez gros.
Un commit décrit une version comme un ensemble de
changements sur au moins un fichier. Un commit peut contenir beaucoup de
changements sur beaucoup de fichiers, des changements de texte, de
permission, de nom, de dossier… Un commit est identifié avec un code de
hashage (SHA-1).
Un commit a aussi un message le décrivant, et il est important de mettre un message le plus clair et simple et cohérent possible.

La copie de travail, c’est une copie de la version courante du dépôt que vous pouvez éditer et modifier. La version courante est celle marquée “HEAD”.
Vous ne pouvez pas changer la version de travail si votre copie de travail est modifiée
Si votre copie de travail est modifiée, c’est à dire différente de la version courante dans git, alors vous pouvez:
commitstash sauver vos changements dans la pile de stash et
revenir à la version courante dans gitSi votre copie de travail n’est pas modifiée, alors vous pouvez:
L’état de la copie de travail est affiché par
git status
Pour vous faciliter la vie, faites, dans un terminal:
git config --global core.pager ''
git config --global core.editor nano
git config --global user.name "votre nom"
git config --global user.email "votre@email"
La première ligne concerne git log. git log
utilise par défaut un éditeur simplifié nommé “less”, et cela force à
taper q pour sortir de l’affichage d’une liste de
commits.
La deuxième ligne concerne git commit. Si vous
n’utilisez pas l’option -m, alors git commit
lance l’antique éditeur de texte vi. nano est
un peu plus moderne et facile à utiliser.
Les deux dernières lignes simplifient les messages affichés par commit.
Cette commande crée un dépot local dans le dossier courant.
Si tout va bien, il n’y a pas de message. Tout message signale une erreur et doit être lu.
Cette commande donne des informations sur l’état du dépot git dans le dossier courant:
Cette commande permet d’ajouter un fichier ou tous les fichiers d’un dossier dans l’index.
git add src/tp01/Main.java ajoute src/tp01/Main.java à
l’index, c’est à dire au prochain commit.
git add src ajoute tous les fichiers dans le dossier src
à l’index.
Si tout va bien, il n’y a pas de message. Tout message signale une erreur et doit être lu.
Cette commande crée un commit à partir de tous les fichiers placés dans l’index.
git commit crée un commit et ouvre un éditeur de texte
pour vous forcer à écrire un message de commit.
git commit -m "message" crée un commit avec le message
donné.
Si tout va bien, il n’y a pas de message. Tout message signale une erreur et doit être lu.
Cette commande affiche des informations sur les précédents commits.
git log affiche tous les commits
git log --stat affiche tous les commits y compris les
informations sur les fichiers inclus dans chaque commit.
|
Créer un nouveau dépôt :
|
|
git initgit statusgit add filegit add filegit loggit commit -m "message"git status et les fichiers du stage sont en vertSuivent les transparents de la vidéo précédente.
Pour échanger avec d’autres personnes/machines, you avez besoin d’accéder à leur dépôt et eux ont besoin d’accéder au vôtre (ou à une copie).
GIT vous permet de transférer tout ou partie d’un dépôt vers un autre dépôt.
Un dépôt Git local peut être connecté à un dépôt distant sur un serveur Git: le serveur distant a une URL d’accès.
Télécharger un logiciel libre et l’adapter:
git clone URL pour créer un dépôt local depuis le dépôt
distant dans URLgit checkout BRANCH pour mettre dans la copie de
travail la branche qui vous concernegit add,
git commitgit push pour envoyer les changements sur le dépôt
distantLa boucle de travail plus large est:
Pull récupérez les changements du dépôt distant (par
ex: de vos collègues)commit, etc… (c’est
la boucle initiale)Push envoyez les nouveaux commits dans le dépôt
distant
git init, il n’a pas de
“remote”
git remote add distant URLgit push --set-upstream distant maingit clone, un lien vers
le dépôt distant existe avec le nom “origin”git push envoie l’état de la branche courante vers le
premier dépôt distantgit push remoteName envoie l’état de la branche
courante vers le dépôt distant nommé remoteNamegit fetch est l’opposé de git push, il recopie
l’information de la branche distante dans la branche locale; la copie de
travail n’est pas modifiéegit pull est la combinaison de git fetch
et git merge
Prenons un exemple:
public class Toto {
public Toto() {}
}
Ce fichier est dans la copie de travail chez vous et au travail.
Vous ajoutez un paramètre au constructeur chez vous :
public class Toto {
public Toto(int i) {}
}
Vous faites commit, puis push, puis vous travaillez sur autre chose pendant une semaine.
Vous êtes maintenant au travail. Vous refaites la même chose, mais un peu différemment:
public class Toto {
public Toto(int var) {}
}
Vous faites commit et push. GIT répond que votre dépôt local est en
retard sur le dépôt distant. Ce retard est du à la modification poussée
la semaine dernière. Comme le suggère GIT, vous faites
git pull. Conflit!
Voici le contenu de votre fichier:
public class Toto {
<<<<<<< HEAD
public Toto(int var) {}
=======
public Toto(int i) {}
>>>>>>> other
}
GIT a reconnu les parties identiques, et vous montre les deux versions des parties différentes.
Pour résoudre les conflits, vous devez:
git add et git commitgit clone URL
*.class = ne pas suivre les fichiers avec extension
.classbin/ = ne pas suivre le dossier binfile.txt = ne pas suivre le fichier file.txt, même si
c’est du texteCette ressource en anglais est une référence, très complète et d’accès ardu: git-scm.org