5 novembre 2014

Git - Utilisation en local pour voir les bases de Git

Nous allons voir dans comment utiliser Git en local.

Sur Windows, il est conseillé d'installer Git et d'utiliser Git Bash qui est un shell disposant des commandes Git. Il gère l'auto-complétion au niveau des commandes Git et des noms de branches et de fichiers. L'installation de Git contient également le programme gitk qui permet d'avoir une visualisation de son dépôt.

Création d'un projet vide

Nous créons un répertoire vide pour notre projet. Dans notre exmple, nous créons le répertoire project dans c:/git.
$ mkdir project
$ cd project

Création d'un dépôt local - git init

Nous créons un dépôt en local.
$ git init
Initialized empty Git repository in c:/git/project/.git/
L'invité de commandes indique maintenant que nous sommes sur la branche master du projet via le nom entre parenthèses :
/c/git/project (master)

gitk

Nous pouvons une visualisation de notre projet grâce à gitk.
$ gitk --all
Le message "Aucun commit sélectionné" apparaît : notre dépôt local est vide.

Nous fermons la fenêtre gitk.

Premier commit - git commit

Nous créons maintenant notre premier fichier du projet :
$ echo "State 1" > file.txt
La commande git status nous indique que le fichier file.txt est untracked, c'est à dire qu'il n'est pas suivi par git.
$ git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        file.txt

nothing added to commit but untracked files present (use "git add" to track)
Nous ajoutons le fichier pour qu'il soit présent au prochain commit :
$ git add file.txt
La commande git status montre que le fichier est bien pris en compte par Git :
$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   file.txt

Nous effectuons notre premier commit :
$ git commit -am "First commit"
[master (root-commit) 7a0e657] First commit
 1 file changed, 1 insertion(+)
 create mode 100644 file.txt

gitk

Nous pouvons ouvrir gitk pour voir le commit du fichier :
$ gitk --all
La branche master apparaît : il s'agit de la branche principale et par défaut du dépôt.
Le point jaune indique que nous nous situons sur cette branche master

Branche

La branche master est la branche principale du projet. Chaque développement de fonctionnalités se feront sur des branches séparées. Les modifications effectuées sur ces branches seront ensuite reportées sur la branche master.

Création d'une branche - git checkout -b

Nous créons une nouvelle branche à partir de la branche master pour effectuer les nouveaux développements.
$ git checkout -b branch_1
Switched to a new branch 'branch_1'
A la place de (master), l'invité de commande indique maintenant entre parenthèse le nom de la nouvelle branche (branch_1).

gitk

gitk a ajouté un marqueur pour la branche branch_1 sur la même ligne que la branche master. Ceci indique que la branche branch_1 n'a pas de modification par rapport à la branche master :
Le point jaune indique que nous nous situons sur la branche branch_1 qui est au même niveau que sur la branche master

Modification de fichier

Nous pouvons effectuer une modification de notre fichier file.txt :
$ echo "State 2" > file.txt
La commande git status indique que le fichier file.txt a été modifié :
$ git status
On branch branch_1
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

        modified:   file.txt

no changes added to commit (use "git add" and/or "git commit -a")

gitk

gitk indique que des modifications ont été effectuées mais non pas été commitées :

Annuler des modifications non commitées - git checkout [file]

Nous souhaitons annuler les modifications effectuées sur un fichier.

Nous pouvons utiliser la commande git checkout en indiquant le nom du fichier :

$ git checkout file.txt

Commiter les modifications du fichier - git commit

Nous effectuons un commit du fichier file.txt sur la branche branch_1 :
$ git commit -am "Commit 2"
[branch_1 fbd30a6] Commit 2
 1 file changed, 1 insertion(+), 1 deletion(-)

gitk

gitk affiche deux points : le point de la branche branch_1 est avant celui de la branche master. Ceci indique que la branche branch_1 contient des modifications supplémentaires par rapport à la branche master.
Le point jaune indique que nous nous situons sur la branche branch_1 :
gitk affiche également les modifications effectuées sur le fichier file.txt.

Fusionner la branche avec le master - git merge

Pour reporter les modifications de la branche sur le master, nous utilisons la commande git merge [nom branche].
Nous nous plaçons sur la branche master :
git checkout master
Dans gitk, le point jaune se situe maintenant sur la branche master :
Maintenant que nous sommes sur le master, nous pouvons lancer la commande git merge pour reporter les modifications situées de la branche branch_1 sur cette branche master.
La commande git merge va également modifier le dépôt local (pas besoin de faire de commit)
$ git merge branch_1
Updating bcc9047..d76b0e3
Fast-forward
 file.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
gitk indique que la branche master est au même niveau que la branche branch_1, c'est à dire que le master a le même contenu que la branche branch_1.
Le fichier file.txt a été modifié et correspond au contenu de la branche branch_1.

Tagguer une version - git tag

Le tag d'une version permet d'avoir une version à l'instant "t" de tous les fichiers du dépôt.
Nous créons un tag disposant d'un nom (= annotation) qui sera visible en jaune dans gitk :
git tag -a [nom tag] -m '[message tag]'
Exemple :
git tag -a v1.0 -m 'my version 1.0'
Nous pouvons maintenant effectuer un checkout de ce tag pour récupérer cette version :
git checkout [nom tag]
Cependant les fichiers modifiés ne pourront pas être commités sur le tag. Il est nécessaire de créer une branche de travail auparavant via git checkout -b et à merger ensuite cette branche sur le master.

En conclusion, la branche master continue à évoluer, alors que le tag est figé.

Conclusion

Nous venons de voir une utilisation de Git en local pour nous familiariser avec les commandes de base.

L'étape suivante maintenant est d'utiliser Git avec un serveur distant comme par exemple avec Github.