Taille: 10934
Commentaire:
|
Taille: 13838
Commentaire:
|
Texte supprimé. | Texte ajouté. |
Ligne 25: | Ligne 25: |
== Comment ça marche ? (Dans les grandes lignes) == Git s'articule autour d'un système de "commits" : Il s'agit de points de sauvegarde de l'état de votre projet. Chaque commit, à l'exception du commit racine qui est le point de départ de vôtre dépôt, possède une référence vers au minimum 1 commit parent. Chacun d'entre eux enregistre donc les différences concernant l'état du dépôt par rapport à celui de son ou ses parents. Cela permet d'enregistrer l'histoire du projet et de pouvoir la rejouer si besoin est (Revenir en arrière, puis avancer de nouveau, développer sur plusieurs branches en parallèle dans un même projet ...). Ils contiennent également le nom de la personne les ayant généré, leurs dates de création, des messages les décrivant. Chaque commit est identifié de manière unique dans un dépôt donné par une checksum (par exemple : 9659aef221eb16511c632eef60a621dd85ddfe95) mais les 7 premiers caractères suffisent lorsqu'on y fait référence dans une commande (9659aef suffit à identifier l'exemple précédent) |
|
Ligne 143: | Ligne 151: |
Imaginons que mon fichier {{{test.py}}} contenait dans mon précédent commit ce qui suit : | Imaginons que votre fichier {{{test.py}}} contenait dans le précédent commit ce qui suit : |
Ligne 146: | Ligne 154: |
que j'ai depuis changé en | que vous avez depuis changé en |
Ligne 155: | Ligne 163: |
Git est capable de me dire exactement quelles sont les différences entre la dernière version enregistrée du fichier et sa version actuelle : | Git est capable de dire exactement quelles sont les différences entre la dernière version enregistrée du fichier et sa version actuelle : |
Ligne 179: | Ligne 187: |
$ git commit -m "Transformation de test.py en script"}}} | $ git commit -m "Transformation de test.py en script" [master c226e8a] Transformation de test.py en script 1 file changed, 3 insertions(+), 1 deletion(-) mode changed 100644 => 100755}}} |
Ligne 185: | Ligne 196: |
=== Revenir à une version précédente d'un fichier === === Annuler un commit === |
=== Annuler les modification en cours d'un fichier === Plusieurs cas de figure sont possibles. * Vous avez modifié votre fichier test.py depuis le dernier commit, vous ne les avez pas ajoutées au prochain commit avec {{{git add}}} et vous voulez annuler lesdites modifications: . {{{ $ git checkout -- test.py}}} * Vous avez modifié votre fichier test.py depuis le dernier commit, vous les avez ajoutées au prochain commit avec {{{git add}}} et vous voulez annuler lesdites modifications: . {{{ $ git reset HEAD test.py Modifications non indexées après reset : M test.py}}} |
Ligne 191: | Ligne 211: |
Si vous avez accidentellement ajouté des fichiers que vous ne vouliez pas suivre, vous pouvez les enlever du système de suivi : ils seront alors considérés comme des fichiers non suivis dans {{{git status}}}. Si vous voulez retirer {{{test.py}}} du système de suivi: {{{ $ git rm --cached test.py rm 'test.py' $ git commit -m "test.py n'est plus suivi" [master 6bc0bb6] test.py n'est plus suivi 1 file changed, 3 deletions(-) delete mode 100755 test.py}}} |
|
Ligne 192: | Ligne 223: |
Vous pouvez dire à Git de ne pas prendre en compte certains fichiers ou dossiers présents dans votre dépôt. Aucun suivi ne sera effectué sur ces éléments, et ils n'apparaîtront plus dans le {{{git status}}}, à condition qu'ils n'aient jamais été suivis. Il suffit pour cela de vous rendre dans la racine de vôtre dépôt et d'écrire un fichier {{{.gitignore}}}. Si vous voulez par exemple que Git ignore tous les fichiers se terminant par .md sauf README.md, le dossier test/, tous les fichiers précompilés .pyc ou .pyo ainsi que ceux qui pourraient être contenus dans tous les sous-dossiers de votre projet: {{{ *.md !README.md test/ **/*.py[co] **/__pycache__/}}} |
Utiliser Git
Sommaire
Qu'est-ce que Git ?
Git est un logiciel de contrôle de version, c'est à dire qu'il permet de garder une trace des modifications effectuées sur un fichier dans le but de pouvoir suivre l'évolution du projet.
On peut donc (entre autres) :
- enregistrer l'avancée du projet au fur et à mesure,
- revenir à une version antérieure si besoin,
- travailler sur le même projet dans des branches de développement différentes pour ne pas perturber une configuration qui fonctionne,
- les recombiner à tout moment,
- permettre le travail collaboratif sur un même dépôt disponible sur le réseau,
- même si le dépôt distant est injoignable, travailler sur sa copie locale
- ouvrir plus ou moins son projet au monde
- filtrer les modifications venant de contributeurs inconnus à incorporer dans le projet
Il en existe d'autres (CVS, Mercurial, Subversion, Bazaar ...), mais Git est à l'heure actuelle l'un des plus puissants d'entre eux.
Git est disponible sur la plupart des systèmes courants (GNU/Linux, OS X, Windows), mais ce tutoriel s'appuie sur des exemples testés sur un OS GNU/Linux.
Cette page a pour but d'exposer les commandes basiques pour l'utilisation de Git.
Comment ça marche ? (Dans les grandes lignes)
Git s'articule autour d'un système de "commits" : Il s'agit de points de sauvegarde de l'état de votre projet.
Chaque commit, à l'exception du commit racine qui est le point de départ de vôtre dépôt, possède une référence vers au minimum 1 commit parent. Chacun d'entre eux enregistre donc les différences concernant l'état du dépôt par rapport à celui de son ou ses parents. Cela permet d'enregistrer l'histoire du projet et de pouvoir la rejouer si besoin est (Revenir en arrière, puis avancer de nouveau, développer sur plusieurs branches en parallèle dans un même projet ...). Ils contiennent également le nom de la personne les ayant généré, leurs dates de création, des messages les décrivant.
Chaque commit est identifié de manière unique dans un dépôt donné par une checksum (par exemple : 9659aef221eb16511c632eef60a621dd85ddfe95) mais les 7 premiers caractères suffisent lorsqu'on y fait référence dans une commande (9659aef suffit à identifier l'exemple précédent)
Installer Git
GNU/Linux
Git est en général inclus dans l'installation de base du système. Si ce n'est pas le cas, vous pouvez (et même devez) utiliser le gestionnaire de paquets de votre distribution.
Par exemple, pour Debian et ses dérivés (Ubuntu ...)
# apt-get install git
OS X
La procédure d'installation de Git se trouve ici : Installer Git sous OS X
Windows
La procédure d'installation de Git se trouve ici : Installer Git sous Windows
Indiquer à Git son identité
Avant de commencer, il faut indiquer à Git qui va faire les modifications sur le dépôt avec le compte utilisé.
Le plus simple est de configurer son identité pour tous les dépôts de la machine : ce réglage n'a besoin d'être fait qu'une seule fois. Cela est possible avec les commandes suivantes :
$ git config --global user.name "<prénom> <nom>" $ git config --global user.email <adresse mail>
D'autres options sont disponibles, mais il n'est pas nécessaire de les préciser. Pour obtenir d'avantage d'informations sur la configuration de Git : Configuration basique de Git
Initialiser un dépôt
Pour commencer, il faut d'abord initialiser un dépôt dans lequel on va pouvoir travailler. Un dépôt est simplement un dossier dans lequel se trouve un sous dossier .git que Git utilisera pour la gestion du dépôt. Ce sous-dossier a une structure spécifique et doit donc être généré par Git lui-même.
Ne jamais toucher l'intérieur du dossier .git
Vous risquez de casser de manière irréversible le système de suivi de votre dépôt
Le dossier en question peut être vide ou pas, cela ne gênera pas Git.
$ cd /chemin/vers/le/futur/dépôt $ git init Dépôt Git vide initialisé dans /chemin/vers/le/futur/dépôt/.git/
Vous pouvez alors taper la commande git status pour voir quels fichiers peuvent être suivis. Par exemple, si le dossier contenait un fichier test.py et un dossier test/, on aura
$ git status Sur la branche master Validation initiale Fichiers non suivis: (utilisez "git add <fichier>..." pour inclure ce qui sera validé) test.py test/ aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez "git add" pour les suivre)
Vous pouvez ajouter ceux que vous voulez suivre avec la commande indiquée :
$ git add test.py test/
ou si vous voulez tout suivre
$ git add .
Il ne reste plus qu'à effectuer le premier "commit" de votre projet. Un commit est une entrée dans l'histoire de votre projet contenant les modifications apportées depuis le commit précédent. Vous pouvez le voir comme un point sur une frise chronologique.
$ git commit
Votre éditeur de texte préféré s'ouvre alors, et vous pouvez taper un commentaire sur votre commit. Par exemple, "Initialisation du projet".
Il est également possible de tout taper dans une seule commande git commit -m "Initialisation du projet". Vous devez obtenir quelque chose dans le style:
$ git commit -m "Initialisation du projet" [master (commit racine) c890b54] Initialisation du projet 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test.py
Voilà, votre dépôt est initialisé, l'état de vos fichiers à ce moment est enregistré, vous pouvez de nouveau travailler dessus.
Travailler dans son dépôt
Ci-dessous sont exposées les actions basiques dont vous pourriez avoir besoin.
Vérifier l'état du dépôt
Pour connaître l'état du dépôt à l'instant présent, vous pouvez utiliser git status
$ git status Sur la branche master Modifications qui seront validées : (utilisez "git reset HEAD <fichier>..." pour désindexer) modifié : test4.sh nouveau fichier : README.md Modifications qui ne seront pas validées : (utilisez "git add <fichier>..." pour mettre à jour ce qui sera validé) (utilisez "git checkout -- <fichier>..." pour pour annuler les modifications dans la copie de travail) modifié : test.py Fichiers non suivis: (utilisez 'git add <fichier>..." pour inclure dans ce qui sera validé) test2 aucune modification n'a été ajoutée à la validation (utilisez "git add" ou git commit -a")
Git vous indique ainsi la branche sur laquelle vous vous trouvez, fichiers suivis qui ont été modifiés et qui seront dans le prochain commit, ceux qui n'y seront pas, les nouveaux fichiers/dossiers non suivis ...
Plus d'informations sur git status : manpage de git-status
Regarder les différences entre la version actuelle d'un fichier et le dernier commit
Imaginons que votre fichier test.py contenait dans le précédent commit ce qui suit :
1 print("Ceci est un fichier Python 3 contenu dans mon projet Git")
que vous avez depuis changé en
en ayant pris soin d'en faire un exécutable
$ chmod 755 test.py
Git est capable de dire exactement quelles sont les différences entre la dernière version enregistrée du fichier et sa version actuelle :
1 $ git diff test.py
2 diff --git a/test.py b/test.py
3 old mode 100644
4 new mode 100755
5 index 947dcbc..d187be4
6 --- a/test.py
7 +++ b/test.py
8 @@ -1 +1,3 @@
9 -print("Ceci est un fichier Python 3 contenu dans mon projet Git")
10 +#!/usr/bin/python3
11 +
12 +print("Ceci est un script Python 3 contenu dans mon projet Git")
13
Il est également possible de voir les différences entre deux commits quelconques avec git diff <commit 2> <commit 1>
Plus d'informations sur git diff : manpage de git-diff
Enregistrer les modifications de fichiers/dossiers dans le dépôt
Sitôt que les modifications apportées à vôtre dépôt vous conviennent, commitez-les :
$ git add test.py $ git commit -m "Transformation de test.py en script" [master c226e8a] Transformation de test.py en script 1 file changed, 3 insertions(+), 1 deletion(-) mode changed 100644 => 100755
Plus d'informations sur git add : manpage de git-add
Plus d'informations sur git commit : manpage de git-commit
Annuler les modification en cours d'un fichier
Plusieurs cas de figure sont possibles.
Vous avez modifié votre fichier test.py depuis le dernier commit, vous ne les avez pas ajoutées au prochain commit avec git add et vous voulez annuler lesdites modifications:
$ git checkout -- test.py
Vous avez modifié votre fichier test.py depuis le dernier commit, vous les avez ajoutées au prochain commit avec git add et vous voulez annuler lesdites modifications:
$ git reset HEAD test.py Modifications non indexées après reset : M test.py
Retirer des fichiers du système de suivi
Si vous avez accidentellement ajouté des fichiers que vous ne vouliez pas suivre, vous pouvez les enlever du système de suivi : ils seront alors considérés comme des fichiers non suivis dans git status.
Si vous voulez retirer test.py du système de suivi:
$ git rm --cached test.py rm 'test.py' $ git commit -m "test.py n'est plus suivi" [master 6bc0bb6] test.py n'est plus suivi 1 file changed, 3 deletions(-) delete mode 100755 test.py
Ignorer des fichiers ou des dossiers
Vous pouvez dire à Git de ne pas prendre en compte certains fichiers ou dossiers présents dans votre dépôt. Aucun suivi ne sera effectué sur ces éléments, et ils n'apparaîtront plus dans le git status, à condition qu'ils n'aient jamais été suivis.
Il suffit pour cela de vous rendre dans la racine de vôtre dépôt et d'écrire un fichier .gitignore.
Si vous voulez par exemple que Git ignore tous les fichiers se terminant par .md sauf README.md, le dossier test/, tous les fichiers précompilés .pyc ou .pyo ainsi que ceux qui pourraient être contenus dans tous les sous-dossiers de votre projet:
*.md !README.md test/ **/*.py[co] **/__pycache__/
Avant de modifier des fichiers
Avant de pouvoir commencer à travailler, il faut déjà s'assurer que quelqu'un n'a pas laissé des modifications non sauvegardées dans le dépôts, et que le dépôt local est à jour avec le dépôt distant, s'il y en a un.
Vérifier que quelqu'un n'a pas laissé des modifications non commitées
Si quelqu'un travaillait dans le dépôt et n'a pas eu le temps de terminer son travail, il est possible de mettre ses modifications de côté avec git stash:
- Vérifier l'état du dépôt
$ git status
- Stasher des modifs (les modification sont empilées, de telle sorte qu'il est possible de stasher plusieurs fois)
$ git stash
- Lister les stashs présents
$ git stash list
- Déstasher des modifs
$ git stash pop <nom du stash(optionnel)>
Vérifier que son dépôt est en phase avec un dépôt distant
- Des commits sur le dépôt local peuvent ne pas avoir été pushé. Pour le vérifier :
$ git remote show
- Il est possible que d'autres gens aient travaillé sur le projet et aient apporté des changements qu'ils ont poussé vers le dépôt distant, il faut alors les importer :
$ git pull
- Pour un mélange des deux cas précédents :
Ne pas abuser de cette méthode
Un rebase foireux peut vite devenir compliqué à gérer !
$ git pull --rebase
Commiter ses modifications aux fichiers versionnés
Lorsqu'un changement est apporté aux fichiers versionnés sur le serveur, il doivent être mis à l'index avant d'être commités pour qu'elles soient sauvegardées dans l'historique.
La commande git status permet d'indiquer les fichiers modifiés/non suivis.
Si les modifications du fichier chemin/vers/machin.conf doivent être ajouté à l'index, il faut entrer la commande :
$ git add chemin/vers/machin.conf
Plusieurs fichiers ou dossiers peuvent simultanément être ajoutés à l'index.
Une fois les modifications indexées, il faut les commiter pour enregistrer les modifications.
$ git commit
À ce moment un éditeur, en général nano, vim ou emacs, ouvre une zone d'édition où l'administrateur entre un message expliquant la modification concernée.
Une fois la modification enregistrée en local, il faut la pousser vers un dépôt distant, s'il y en a un.
$ git push