Le répertoire (repository)
Le dossier qui contient l’intégralité du projet
Créer un répertoire de zéro
git init nouveau_projet
- Crée un dossier vide
nouveau_projet
, prêt pour le contrôle de versions.
Copier un répertoire existant
git clone mon_projet ma_copie
git clone https://github.com/moi/mon_projet
- Crée un dossier contenant une copie du projet.
- Garde une référence vers le projet d’origine (remote
origin
) pour les push et les pull.
Sauvegardes incrémentales
Git représente l’historique par une séquence de différences (diffs). Une différence est décrite :
- par les lignes ajoutées,
- par les lignes enlevées.
diff --git a/js/polyfills.js b/js/polyfills.js
index 38f8652..9de8f99 100644
--- a/js/polyfills.js
+++ b/js/polyfills.js
@@ -81,13 +81,13 @@ Element.prototype.css = function(css) {
}
-Element.prototype.on = function(evts, cb, bubble) {
+Window.prototype.on = function(evts, cb, bubble) {
var evts = evts.split(/\s+/);
for (var i = 0 ; i < evts.length ; i++)
this.addEventListener(evts[i], cb, bubble);
return this;
}
Examiner une diff
-
Montrer les différences par rapport à la dernière sauvegarde
git diff
-
Montrer les changements appliqués par un commit
git show 7b4c982935c77fab568
-
Explorateur graphique
gitk
-
Interface web (ex. : GitHub): https://github.com/defeo/in202.github.io/commits/master
Le commit
Le commit est l’unité de sauvegarde de Git. Il est composé
- de la diff par rapport à la dernière sauvegarde,
- du message de commit, l’auteur, la date, etc.,
- des commits parents,
- du commit hash (20 octets), qui est son identifiant unique.
commit bf02e55732fd922e17a1cb20bf127e630261f069
Author: Luca De Feo <dfl@deagol>
Date: Sat Feb 14 14:18:40 2015 +0100
Amended TD 3 to cope with many platform problems
TODO.md | 1 +
tutorials/tutorial3.md | 46 +++++++++++++---------------------------------
2 files changed, 14 insertions(+), 33 deletions(-)
commit 3fb01d6b6d561cfa77f5f441353e90a6f842f4c1
Créer un commit
Par la ligne de commande
-
Ajouter les fichiers à sauvegarder (staged files)
git add fichier1.c fichier2.html
-
Créer le commit (ouvre un éditeur pour écrire le message de commit)
git commit
Autres méthodes
-
Interface graphique
git gui
-
Interface web (ex. : GitHub) : https://github.com/defeo/in202.github.io/edit/master/README.md
Examiner les commits
-
La liste de tous les commits
git log
options :
--stat
résumé des fichiers changés,--graph
montre le DAG de l’historique. -
Examiner un seul commit
git show c7f717e9b5a8fb34
demande un identifiant du commit : partie initiale du hash, ou autre code (ex. :
HEAD
represente le dernier commit). -
Explorateur graphique :
gitk
. -
Explorateur web :
https://github.com/defeo/in202.github.io/commits/master.
Examiner le répertoire
git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: classes/class5.md
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: index.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
classes/.#class5.md
Les branches
Une branche est une ligne de développement :
- L’historique des commits qui amènent à la branche.
- En pratique, une branche est un pointeur à un commit.
Un répertoire peut contenir plusieurs branches. La branche par défaut
s’appelle master
.
-
Créer une branche :
git branch nouvelle_branche
-
Changer de branche courante (attention, il ne doit pas y avoir de modifications non commitées) :
git checkout nouvelle_branche
La branche courante
À tout moment le répertoire est dans une branche. Pour voir le nom de la branche courante :
git branch -av
* master 3dbc6a4 Fixed bug
test 7b4c982 Wild experiment
remotes/boilerplate/master bf02e55 Version 2.0
-
Une branche indentifie un commit
git log master
commit 3dbc6a4bc0885c6af3f4f3ea8738781d31f971ac Author: Luca De Feo <dfl@deagol> Date: Sun Feb 15 21:47:41 2015 +0100
-
La branche courante évolue :
git commit
ajoute le nouveau commit à la branche courante.
Travailler avec des remotes
Les remotes sont des copies distantes du répertoire (par ex., GitHub).
-
Un répertoire cloné a toujours un remote appelé
origin
.git remote -v
origin git@github.com:/defeo/in202.github.io (fetch) origin git@github.com:/defeo/in202.github.io (push)
-
On peut ajouter et enlever des remotes
git remote add jean https://github.com/jean/son_projet.git git remote remove mon_collegue
Branches tracées
Dans un répertoire cloné, les branches locales tracent les branches distantes.
git branch -vv
test 7b4c982 [jean/test] Wild experiment
* master 3dbc6a4 [origin/master] Version 1.1
test
tracejean/test
,master
traceorigin/master
.
Télécharger les changements
git fetch jean
Télécharge les modifications dans le remote jean
, sans faire des
modifications à la branche locale. git status
montre les
différences entre la branche courante et sa branche tracée.
Pousser, tirer
-
Tirer : appliquer les changements de la branche tracée.
git pull --ff-only
donne une erreur si les historiques ont divergé.
-
Pousser : envoyer les changements à la branche tracée.
git push
donne une erreur si les historiques ont divergé. Requiert les droits en écriture sur le répertoire distant.
-
Tirer et merger : appliquer les changements, même s’il y a des confilts
git pull
Si un conflit se présente
git merge --abort
revient à l’état avant le pull.
Lectures
Le Git Book :