Git/Premiers pas

Un livre de Wikilivres.
< Git
Aller à : navigation, rechercher

Les premières commandes sont la création d'un dépôt, y soumettre des fichiers, les refuser, en retirer, et visualiser les fichiers d'une soumission.

Créer un dépôt[modifier | modifier le wikicode]

Créer un nouveau dépôt Git s'effectue en deux commandes : git-init, et git-clone. Exemple :

$ git init depot1

Créer le répertoire vide :

  1. /home/utilisateur/depot1/.git/ sur Linux.
  2. C:/Users/utilisateur/depot1/.git/ sur Windows.

On peut naviguer dedans en Unix :

$ cd depot1
$ ls -a
.  ..  .git

Pour transformer un répertoire existant en dépôt :

$ cd $depot2
$ git init

Le dépôt Git est donc contenu dans le sous-répertoire .git.

 pour que Git soit positionné dans le répertoire de votre choix à chaque ouverture, sous Windows faire un clic droit sur le raccourci, puis modifier le chemin du champ "démarrer dans".

Ajouter et soumettre des fichiers[modifier | modifier le wikicode]

Au lieu de soumettre chaque fichier modifié, Git permet à l'utilisateur de les ajouter dans une zone appelée "l'index". Tout ce qui s'y trouve se retrouve soumis. Pour en lister le contenu il existe git status ou git diff --staged.

Ajoutons un fichier texte (créé avec vim) dedans :

# Création du fichier
 $ vim fichier.txt
 Test Git Wikilivres.
 
# Vérification de l'index
 $ git status
 # On branch master
 #
 # Initial commit
 #
 # Untracked files:
 #   (use "git add <file>..." to include in what will be committed)
 #
 #	fichier.txt
 nothing added to commit but untracked files present (use "git add" to track)

Cela montre que nus utilisons une branche appelée "master" et qu'il y a un fichier que Git ne suit pas. Pour ce faire Git ajoute une note d'aide tout en bas proposant de l'inclure avec git add fichier.txt :

 $ git add fichier.txt
 $ git status
 # On branch master
 #
 # Initial commit
 #
 # Changes to be committed:
 #   (use "git rm --cached <file>..." to unstage)
 #
 #	new file:   fichier.txt
 #

Le fichier inclus est maintenant prêt à être soumis :

 $ git commit -m 'Soumission 1'
 [master (root-commit) be8bf6d] Soumission 1
  1 files changed, 1 insertions(+), 0 deletions(-)
  create mode 100644 fichier.txt
 en lançant git commit tout court, l'éditeur de texte ($EDITOR) s'ouvre automatiquement pour inviter à saisir un commentaire de soumission.

Exclure des fichiers[modifier | modifier le wikicode]

Souvent il y a des fichiers dans l'espace de travail qui ne sont pas souhaitables dans le dépôt. Par exemple, emacs crée automatiquement une copie des fichiers éditer avec, avec un suffixe tilde, comme fichier1~. Il faut donc éviter manuellement de les soumettre.

Pour dire à Git d'ignorer certain fichiers, il est possible de créer un fichier .gitignore. Chaque ligne y représente une spécification (avec wildcards) des fichiers à ignorer. Des commentaires peuvent être ajoutés dedans sur les lignes débutant par un blanc ou un dièse :

# Ignorer les backups emacs :
*~

# Ignorer le répertoire ''cache'' :
app/cache

Choisir ses messages de soumission[modifier | modifier le wikicode]

Les bonnes pratiques sont [1] :

  1. 50 caractères maximum pour le titre, résumant les changements.
  2. Selon le contexte, la première ligne est traitée comme le sujet d'un email et le reste séparé par une ligne blanche, comme le corps du message.
  3. Utiliser le présent des verbes.
  4. Les listes à puces sont autorisées, typiquement avec un moins ou une astérisque.
  5. Le corps du message doit comprendre des lignes de 72 caractères maximum pour plusieurs raisons :
    • git format-patch --stdout convertit une série de soumission en une série d'emails.
    • Le log Git ne revient pas automatiquement à la ligne, sans retour chariot il est donc étalé sur une seule ligne donc difficile à lire. Le nombre 72 est le résultat du calcul des 80 du terminal (selon la nétiquette des mails), moins les 4 de l'indentation et les 4 de sa symétrie à droite.


Les utilisateurs de Vim peuvent rencontrer ce prérequis lors de l'installation de vim-git, ou bien en le définissant dans la configuration des messages de soumission Git :

:set textwidth=72

Ceux de TextMate peuvent ajuster l'option colonne "Wrap" du menu "view", puis utiliser ^Q pour revenir à la ligne des paragraphes (s'assurer qu'il y a une ligne blanche après pour éviter le mélange avec les commentaires). Voici une commande shell pour ajouter 72 au menu afin de ne pas avoir à le faire glisser à chaque fois :

$ defaults write com.macromates.textmate OakWrapColumns '( 40, 72, 78 )'

Ces résumés peuvent ensuite être lus via :

  • git log --pretty=oneline affiche une courte liste des historiques avec identifiants et résumés.
  • git rebase --interactive fournit les résumés de ses propres soumissions.
  • Si l'option de configuration merge.summary est définie, les sommaires de toutes les soumissions seront fusionnés.
  • git shortlog n'affiche que les résumés des précédentes soumissions.
  • git format-patch, git send-email.
  • git reflog, un historique local est accessible pour aider à retrouver d'éventuels erreurs.
  • gitk, une inerface graphique qui a une colonne résumé.
  • Gitweb et d'autres interfaces web comme GitHub affichent également les résumés.

La distinction sujet/corps de texte de Git permet donc un confort de recherche d'historique par rapport à d'autres logiciels similaires comme Subversion.

Supprimer des fichiers[modifier | modifier le wikicode]

 $ echo 'test de suppression Git pour Wikilivres' >> fichier.txt
 $ git status
 # On branch master
 # Changed but not updated:
 #   (use "git add <file>..." to update what will be committed)
 #   (use "git checkout -- <file>..." to discard changes in working directory)
 #
 #	modified:   fichier.txt
 #
 no changes added to commit (use "git add" and/or "git commit -a")

Bien que Git n'impose pas la soumission de tous les fichier, c'est chose commune. On peut le faire sans les réajouter auparavant avec git commit -a :

$ git commit -a -m 'Soumission 2'
[master e633787] Soumission 2
 1 files changed, 1 insertions(+), 0 deletions(-)

Les caractères en gras ci-dessus sont une abréviation de l'identifiant unique de l'objet Git (en l'occurrence une soumission). Chaque objet est haché en SHA-1. L'identifiant complet est en fait e6337879cbb42a2ddfc1a1602ee785b4bfbde518, mais généralement les huit premiers caractères suffisent à l'identifier à coup sûr.

Pour supprimer des fichiers, utiliser rm (de l'anglais remove) :

 $ git rm fichier.txt
 rm 'fichier.txt'
 $ git status
 # On branch master
 # Changes to be committed:
 #   (use "git reset HEAD <file>..." to unstage)
 #
 #	deleted:    fichier.txt
 #
 $ ls -a
 .  ..  .git
Dialog-warning.svg
Attention !

Cela efface le fichier du disque dur. Pour ne l'enlever que du dépôt, utiliser git rm --cached.

 $ git commit -m 'Removed fichier.txt'
 [master b7deafa] Removed fichier.txt
  1 files changed, 0 insertions(+), 2 deletions(-)
  delete mode 100644 fichier.txt

Annuler une soumission[modifier | modifier le wikicode]

Utiliser git revert avec HEAD pour désigner la dernière soumission effectuée :

 $ git revert HEAD
 Finished one revert.
 [master 47e3b6c] Revert "Soumission 2"
  1 files changed, 0 insertions(+), 1 deletions(-)
 $ ls -a
 .  ..  fichier.txt  .git

Pour signifier d'autres soumissions que la dernière :

  • git revert HEAD^ : l'avant dernière.
  • git revert HEAD~5 : la cinquième moins récente.
  • git revert e6337879 : la soumission n°e6337879.

Nettoyer les changements non soumis[modifier | modifier le wikicode]

Pour effacer les changements en cours en rétablissement les états de la dernière soumission :

$ git reset --hard HEAD

ou

$ git reset --hard e6337879

Pour ne toucher qu'un seul fichier :

$ git checkout fichier.txt

Récupérer une version de fichier[modifier | modifier le wikicode]

Il faut d'abord récupérer l'identifiant de la version avec git log :

 $ git log
 commit 47e3b6cb6427f8ce0818f5d3a4b2e762b72dbd89
 Author: NomUtilisateur <NomEmail@exemple.com>
 Date:   Sat Mar 6 22:24:00 2010 -0400
 
     Revert "Soumission 2"
 
     This reverts commit e6337879cbb42a2ddfc1a1602ee785b4bfbde518.
 
 commit e6337879cbb42a2ddfc1a1602ee785b4bfbde518
 Author: NomUtilisateur <NomEmail@exemple.com>
 Date:   Sat Mar 6 22:17:20 2010 -0400
 
     My second commit
 
 commit be8bf6da4db2ea32c10c74c7d6f366be114d18f0
 Author: NomUtilisateur <NomEmail@exemple.com>
 Date:   Sat Mar 6 22:11:57 2010 -0400
 
     My first commit

Ensuite pour lire la version, utiliser git show :

 $ git show e6337879cbb42a2ddfc1a1602ee785b4bfbde518:fichier.txt
 Test Git Wikilivres.
 test de suppression Git pour Wikilivres

Exemple pratique[modifier | modifier le wikicode]

Avec un compte Google gratuit il est possible d'utiliser Google Code :

  1. Sur https://code.google.com/, cliquer sur Create a new project, puis remplir les champs.
  2. Dans Git, lancer la commande montrée par Google : git clone https://xxx@code.google.com/p/yyy/.
  3. Copier les fichiers dans le répertoire ainsi créé.
  4. Les uploader sur le serveur en utilisant le mot de passe présent sur https://code.google.com/hosting/settings :
$ git add *
$ git commit -m 'Soumission 1'
$ git config --global push.default simple
$ git push
Password for 'https://xxx@code.google.com':
Counting objects: 634, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (624/624), done.
Writing objects: 100% (634/634), 2.17 MiB | 81.00 KiB/s, done.
Total 634 (delta 67), reused 0 (delta 0)
remote: Scanning pack: 100% (634/634), done.
remote: Storing objects: 100% (634/634), done.
remote: Processing commits: 100% (1/1), done.
To https://xxx@code.google.com/p/yyyy/
 * [new branch]      master -> master

Les codes sont ensuite publiés en ligne : https://code.google.com/p/yyy/source/browse/.

Références[modifier | modifier le wikicode]

  1. http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html