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
MacBook-Air-749:.git sebastienjean$ more config
...
@@ -81,12 +81,12 @@ MacBook-Air-749:.git sebastienjean$ more config
...
@@ -81,12 +81,12 @@ MacBook-Air-749:.git sebastienjean$ more config
MacBook-Air-749:.git sebastienjean$
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)
- quand ? (quand la version a été produite)
- qui ? (par qui la version a été produte)
- qui ? (par qui la version a été produte)
- pourquoi ? (ce qui justifie cette version)
- 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 :
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
...
@@ -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`)
(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.
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.
Ces changements observés n'entrainent pas automatiquement la création d'une nouvelle version.
### Préparation 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
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, ...
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
```diff
MacBook-Air-749:4git sebastienjean$ git diff
MacBook-Air-749:4git sebastienjean$ git diff
...
@@ -293,7 +293,7 @@ index 927b61b..ee051bd 100644
...
@@ -293,7 +293,7 @@ index 927b61b..ee051bd 100644
MacBook-Air-749:4git sebastienjean$
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 :
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
...
@@ -365,7 +365,7 @@ __N.B.__ : On peut aussi utiliser en paramètre les _hash_ des commits (abbrévi
### Restauration de versions
### 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`.
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
...
@@ -398,7 +398,7 @@ e08fe66 modification du fichier
### Inversion de modifications
### 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 :
On visualise les modifications entre les 2 dernières versions :
...
@@ -448,7 +448,7 @@ index 927b61b..ee051bd 100644
...
@@ -448,7 +448,7 @@ index 927b61b..ee051bd 100644
MacBook-Air-749:4git sebastienjean$
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
```diff
MacBook-Air-749:4git sebastienjean$ git diff HEAD~2 HEAD unFichier.txt
MacBook-Air-749:4git sebastienjean$ git diff HEAD~2 HEAD unFichier.txt