... | ... | @@ -14,11 +14,11 @@ L'objectif de ce qui suit est de prendre en main l'outil de gestion de versions |
|
|
|
|
|
<small><i><a href='http://ecotrust-canada.github.io/markdown-toc/'>Table of contents generated with markdown-toc</a></i></small>
|
|
|
|
|
|
__N.B.__ : _les manipulations suivante sont faites depuis un terminal Linux-compatible, les commandes ont des équivalents sous Windows_
|
|
|
__N.B.__ : _les manipulations suivantes sont effetcuées depuis un terminal Linux-compatible, les commandes ont des équivalents sous Windows_
|
|
|
|
|
|
## Création d'un dépôt local
|
|
|
|
|
|
_On suppose que l'on se trouve dans un répertoire local `4git` (vide) où l'on souhaite commencer à développer_
|
|
|
_On suppose que l'on se trouve dans un répertoire local `4git` (vide) où l'on souhaite commencer à développer_.
|
|
|
|
|
|
La création du dépôt local s'effectue via la commande `git init`:
|
|
|
```
|
... | ... | @@ -66,7 +66,7 @@ drwxr-xr-x 4 sebastienjean staff 128 Dec 16 10:54 refs |
|
|
MacBook-Air-749:.git sebastienjean$
|
|
|
```
|
|
|
|
|
|
Ce répertoire contient des méta-données représentant l'historique, que l'outil _git_ tient à jour au fil des commandes. Les fichiers ne sont pas faits pour être modifiés à la main, à l'exception du fichier `config` qui contient des informations personnalisables de configuration locale du dépôt (voir plus généralement `git config` pour cela) :
|
|
|
Ce répertoire contient des méta-données représentant l'historique, que l'outil _git_ tient à jour au fil des commandes. Les fichiers ne sont pas faits pour être modifiés à la main, à l'exception du fichier `config` qui contient des informations personnalisables de configuration locale du dépôt (voir plus généralement [`git config`](https://git-scm.com/docs/git-config) pour cela) :
|
|
|
|
|
|
```
|
|
|
MacBook-Air-749:.git sebastienjean$ more config
|
... | ... | @@ -81,12 +81,12 @@ MacBook-Air-749:.git sebastienjean$ more config |
|
|
MacBook-Air-749:.git sebastienjean$
|
|
|
```
|
|
|
|
|
|
N.B. Pour rappel, un commit répond aux questions :
|
|
|
__N.B.__ Pour rappel, un _commit_ répond aux questions :
|
|
|
|
|
|
- quand ? (quand la version a été produite)
|
|
|
- qui ? (par qui la version a été produte)
|
|
|
- pourquoi ? (ce qui justifie cette version)
|
|
|
- comment ? (les changements opérés)
|
|
|
- comment ? (les changements opérés dans cette version)
|
|
|
|
|
|
Le fichier de configuration locale permet de paramétrer l'identité de l'auteur des commits, de sorte que l'outil _git_ les utilise automatiquement. Ceci se fait en ajoutant la section `[user]` à la suite de la section `[core]` déjà présente :
|
|
|
|
... | ... | @@ -102,7 +102,7 @@ Le fichier de configuration locale permet de paramétrer l'identité de l'auteur |
|
|
|
|
|
(en se plaçant dans le répertoire de base du dépôt, `4git`)
|
|
|
|
|
|
N.B. : ici la création/édition du fichier s'effectue via la commande `cat` (`Ctrl-D` pour terminer), la commande `pwd` permet de savoir dans quel répertoire l'on se trouve, la commande `more` permet d'afficher le contenu du fichier
|
|
|
__N.B.__ : ici la création/édition du fichier s'effectue via la commande `cat` (`Ctrl-D` pour terminer), la commande `pwd` permet de savoir dans quel répertoire l'on se trouve, la commande `more` permet d'afficher le contenu du fichier.
|
|
|
|
|
|
```
|
|
|
MacBook-Air-749:4git sebastienjean$ pwd
|
... | ... | @@ -118,7 +118,7 @@ MacBook-Air-749:4git sebastienjean$ |
|
|
|
|
|
### Visualisation de l'état du dépôt
|
|
|
|
|
|
La visualisation de l'état du dépôt s'effectue à l'aide de la commande `git status` :
|
|
|
La visualisation de l'état du dépôt s'effectue à l'aide de la commande [`git status`](https://git-scm.com/docs/git-status) :
|
|
|
|
|
|
```
|
|
|
MacBook-Air-749:4git sebastienjean$ git status
|
... | ... | @@ -138,27 +138,27 @@ Ici, plusieurs informations sont données : |
|
|
|
|
|
- la branche courante est `master`
|
|
|
- cette branche ne comporte pas encore de versions (commits)
|
|
|
- git observe dans le _working tree_, l'existence d'un fichier qu'il n'a jamais vu (_untracked_)
|
|
|
- git observe dans le _working tree_ l'existence d'un fichier qu'il n'a jamais vu (_untracked_)
|
|
|
- aucun changement n'est actuellement intégré à la future prochaine version
|
|
|
|
|
|
Cette situation est illustrée ci-dessous :
|
|
|
|
|
|
<p align="center">
|
|
|
<img src="uploads/b6e72399f6acb9f6f216c09982c05797/GitRepoStatus.png" width="66%" />
|
|
|
<img src="uploads/b6e72399f6acb9f6f216c09982c05797/GitRepoStatus.png" width="60%" />
|
|
|
</p>
|
|
|
|
|
|
[//]: 
|
|
|
|
|
|
Les changements observés sont consignés par _git_ dans une zone nommée `working` ou `unstaged` (qu'il s'agisse de la création d'un nouveau fichier ou de la suppression ou modification d'un fichier existant).
|
|
|
Les changements observés sont consignés par _git_ dans une zone nommée `unstaged` (qu'il s'agisse de la création d'un nouveau fichier ou de la suppression ou modification d'un fichier existant).
|
|
|
|
|
|
Ces changements observés n'entrainent pas automatiquement la création d'une nouvelle version.
|
|
|
|
|
|
### Préparation d'une nouvelle version
|
|
|
|
|
|
La sélection des changements à intégrer à la future nouvelle version est explicite et s'effectue
|
|
|
s'effectue via la commande `git add` :
|
|
|
s'effectue via la commande [`git add`](https://git-scm.com/docs/git-add) :
|
|
|
|
|
|
__N.B__. : On peut utiliser des jokers pour ajouter simultanément plusieurs fichiers, un répertoire, ... (cf. l'aide en ligne).
|
|
|
__N.B__. : On peut utiliser des jokers pour ajouter simultanément plusieurs fichiers, un répertoire, ...
|
|
|
|
|
|
```
|
|
|
MacBook-Air-749:4git sebastienjean$ git add unFichier.txt
|
... | ... | @@ -190,7 +190,7 @@ __N.B__. : On peut annuler la prise en compte des changements pour un fichier vi |
|
|
|
|
|
### Création d'une nouvelle version
|
|
|
|
|
|
La création d'une nouvelle version (commit) s'effectue via la commande `git commit` :
|
|
|
La création d'une nouvelle version (commit) s'effectue via la commande [`git commit`](https://git-scm.com/docs/git-commit) :
|
|
|
|
|
|
```
|
|
|
MacBook-Air-749:4git sebastienjean$ git commit -m "ajout d'un fichier"
|
... | ... | @@ -231,7 +231,7 @@ MacBook-Air-749:4git sebastienjean$ |
|
|
|
|
|
### Visualisation de l'historique
|
|
|
|
|
|
La commande `git log` permet de voir l'historique de façon exhaustive et d'y retrouver les pointeurs :
|
|
|
La commande [`git log`](https://git-scm.com/docs/git-log) permet de voir l'historique de façon exhaustive et d'y retrouver les pointeurs :
|
|
|
|
|
|
```
|
|
|
MacBook-Air-749:4git sebastienjean$ git log
|
... | ... | @@ -279,7 +279,7 @@ MacBook-Air-749:4git sebastienjean$ |
|
|
|
|
|
__N.B.__ : ici, le fichier est déjà connu.
|
|
|
|
|
|
La commande `git diff`, sans paramètre, nous permet de comparer le _working tree_ et la version `HEAD` (et ainsi voir tout ce qui est déclaré _unstaged_) :
|
|
|
La commande [`git diff`](https://git-scm.com/docs/git-diff), sans paramètre, nous permet de comparer le _working tree_ et la version `HEAD` (et ainsi voir tout ce qui est déclaré _unstaged_) :
|
|
|
|
|
|
```diff
|
|
|
MacBook-Air-749:4git sebastienjean$ git diff
|
... | ... | @@ -293,7 +293,7 @@ index 927b61b..ee051bd 100644 |
|
|
MacBook-Air-749:4git sebastienjean$
|
|
|
```
|
|
|
|
|
|
Pour chaque changement sur un fichier, une description des changements à la syntaxe _diff_ est produite. Elle fusionne les 2 versions du fichier et note les endroits des changements. L'outil _diff_ ne travaille qu'au niveau d'un ligne (pas au niveau de son contenu), ainsi une modification sur une ligne à l'endroit désigné du fichier est vue comme la suppression (`-`) de la ligne et l'ajout (`+`) d'une autre ligne (cf. documentation pour plus de détails)
|
|
|
Pour chaque changement sur un fichier, une description des changements à la syntaxe [_diff_](https://en.wikipedia.org/wiki/Diff#Unified_format) est produite. Elle fusionne les 2 versions du fichier et annote les endroits où se produisent les changements. L'outil _diff_ ne travaille qu'au niveau d'un ligne (pas au niveau de son contenu), ainsi une modification sur une ligne à l'endroit désigné du fichier est vue comme la suppression (`-`) de la ligne et l'ajout (`+`) d'une autre ligne.
|
|
|
|
|
|
On suppose que l'on valide ces modifications :
|
|
|
|
... | ... | @@ -365,7 +365,7 @@ __N.B.__ : On peut aussi utiliser en paramètre les _hash_ des commits (abbrévi |
|
|
|
|
|
### Restauration de versions
|
|
|
|
|
|
la commande `git checkout` permet de déplacer le curseur `HEAD`sur une version antérieure. Mais son utilisation pour restaurer tout ou partie de la version en question nécessite de manipuler des branches (ce n'est pas l'objet de ce guide).
|
|
|
La commande [`git checkout`](https://git-scm.com/docs/git-checkout) permet de déplacer le curseur `HEAD`sur une version antérieure. Mais son utilisation pour restaurer tout ou partie de la version en question nécessite de manipuler des branches (ce n'est pas l'objet de ce guide).
|
|
|
|
|
|
Néanmoins, si on lui indique en paramètre un fichier ou un répertoire, elle remplace le fichier ou le répertoire du _working tree_ avec une version antérieure sans déplacer `HEAD`.
|
|
|
|
... | ... | @@ -398,7 +398,7 @@ e08fe66 modification du fichier |
|
|
|
|
|
### Inversion de modifications
|
|
|
|
|
|
La commande `git revert`permet d'annuler les modifications d'un commit antérieur (pas forcément le précédent, mais dans ce cas ce n'est possible automatiquement que si aucun des commits suivants n'est en conflit de modification avec celui-ci)
|
|
|
La commande [`git revert`](https://git-scm.com/docs/git-revert) permet d'annuler les modifications d'un commit antérieur (pas forcément le précédent, mais dans ce cas ce n'est possible automatiquement que si aucun des commits suivants n'est en conflit de modification avec celui-ci).
|
|
|
|
|
|
On visualise les modifications entre les 2 dernières versions :
|
|
|
|
... | ... | @@ -448,7 +448,7 @@ index 927b61b..ee051bd 100644 |
|
|
MacBook-Air-749:4git sebastienjean$
|
|
|
```
|
|
|
|
|
|
On visualise les modifications entre la dernière version et son grand-parent, et on observe qu'elles sont bien nulles (on a rétablit le même contenu du _working tree` :
|
|
|
On visualise les modifications entre la dernière version et son grand-parent, et on observe qu'elles sont bien nulles (on a rétabli le même contenu du _working tree` :
|
|
|
|
|
|
```diff
|
|
|
MacBook-Air-749:4git sebastienjean$ git diff HEAD~2 HEAD unFichier.txt
|
... | ... | |