Jimmy Lopez
05 novembre, 2018
Pourquoi utiliser Git
Guide niveau débutant
Guide niveau intermédiaire
C'est quoi un VCS (version control system) ?
GIT = DVCS (Distributed version control system)
Toute copie de travail est autonome et contient tout l'historique.
Pourquoi GIT ?
1-n utilisateur(s)
1 dépôt local + 1 dépôt en ligne (Gitlab mbb)
Un dépôt :
+ les fichiers du projet
+ l'historique des modifications
+ la configuration du dépôt.
Dans un dépôt, les modifications sont matérialisées par des commits.
Un commit :
+ un identifiant de commit (hash)
+ un auteur
+ un ensemble de modifications sur des fichiers (diffs)
+ un commit parent
Sous Linux :
sudo apt-get install git-core
Sous Mac :
https://git-scm.com/download/mac
Sous Window :
http://msysgit.github.io/
Pour configurer son pseudo
git config --global user.name "jlopez"
Pour configurer son email
git config --global user.email jlopez@umontpellier.fr
Pour configurer l'éditeur de texte (pour les allergiques de vim)
git config --global core.editor gedit
git config --global core.editor "\"c:\Program Files\Notepad++\notepad++.exe\" %*"
Pour initialisez un dépôt Git
git init
Pour avoir la documentation des commandes Git
git help
Pour avoir la documention et les options d'une commandes
git help your_command
Pour versionner un fichier
git add my_file.txt
Pour versionner un dossier
git add /path/dir/
Pour créer une version
git commit -m "mon message"
Pour voir l'état courant du dépôt local
git status
Pour visualiser l'historique des commits
git log
Pour visualiser les modifications apportées
git diff
Pour clonner un nouveau dépôt distant
git clone http://jlopez@gitlab.mbb.univ-montp2.fr/jlopez/mon_depot.git
Un nouveau dossier contenant le contenu du dépôts distant est créé en local.
Pour récuperer les modifications faite sur un dépôt distant
git pull origin master
Pour envoyer les modifications local sur un dépôt distant
git push origin master
cd existing_folder
git init
git remote add origin http://jlopez@gitlab.mbb.univ-montp2.fr/jlopez/mon_depot.git
git add .
git commit -m "Initial commit"
git pull origin master
git push -u origin master
Déversionner un fichier non commit
git add my_file
git reset my_file
Pour supprimer un commit non push
git add my_file
git commit -m "my modif"
git reset HEAD~1
Pour supprimer un commit push
(voir dans Intermédiaire)
git pull origin master
Fusion automatique de test.txt
CONFLIT (contenu) : Conflit de fusion dans test.txt
La fusion automatique a échoué ; réglez les conflits et validez le résultat.
Supprimer les conflits dans mon fichier (manuellement)
git add mon_fichier
git commit -m "Fix conflits"
git push origin master
Pour ignorer un fichier il suffit de créer un fichier “.gitignore” à la racine du projet et de mettre les fichiers a ignorer dedans.
#contenu fichier .gitignore
#un fichier en particuler
mon_fichier.txt
#tout un dossier
/build
#tout un type de fichier
*.RData
git add mon_fichier
git commit -m "New modif"
git pull origin master
//Fix conflit si besoin
git push origin master
1-n utilisateur(s)
1 dépôt local + 1 dépôt en ligne (Gitlab mbb)
1-n branches
Des astuces pour aller plus vite
Pour supprimer un commits push
git reset --soft HEAD~1
ou
git reset --hard HEAD~1 (attention supprime en local le contenu)
...
git commit -m "new commit"
git push origin master -f (si pas les droits de forcer, voir sur gitlab)
Si on a oublié un fichier après avoir commit (avant d'avoir push)
git add mon_fichier_oublié
git commit --amend --no-edit
Si on veut changer le message du dernier commit (avant d'avoir push)
git commit --amend -m "mon nouveau message"
Une branche est un historique de travail parallèle et indépendant du travail principal.
Une branche démarre à un point de divergence avec une autre dans l'arbre des commits.
Pour créer une nouvelle branche :
git branch name_branch
Pour se déplacer sur une branche :
git checkout name_branch
Pour fusionner avec la branche master et ma nouvelle branche :
git checkout master
git merge name_branch
Pour créer un tag :
git tag -a v1.0 -m 'my version 1.0'
Lister les tags :
git tag
Pour créer un tag après coup :
git tag -a v0.5 -m 'version 0.5' 9fceb02
Remarques : quand on push les tags ne sont pas envoyé
Pour envoyer un tag :
git push origin v1.0
git push origin --tags