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 documentationEn 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:
commit
stash
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 init
git status
git add file
git add file
git log
git 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 commit
git 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
distantgit init
, il n’a pas de
“remote”
git remote add distant URL
git push --set-upstream distant main
git 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 commit
git 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