Petite démonstration de la puissance de Git

La documentation spécifie que Git est capable de traquer les fichiers, y compris lors des renommages. La documentation spécifie aussi que Git est capable d'afficher l'historique de fichiers à travers les renommages, et même de donner l'origine des lignes d'un fichiers si celles-ci ont été copiées d'un autre fichier.

Pour l'instant, je vais seulement voir ce que Git a dans le ventre pour ce qui est du suivi des renommages.

Voici ci-dessous, une petite manip que je vais vous expliquer :

001: [jnavila@coriandre ~]$ mkdir test
002: [jnavila@coriandre ~]$ cd test/
003: [jnavila@coriandre test]$ git init
004: Initialized empty Git repository in /home/jnavila/test/.git/
005: [jnavila@coriandre test (master #)]$ cp -r ../bin .
006: [jnavila@coriandre test (master #)]$ ls
007: bin
008: [jnavila@coriandre test (master #)]$ cd bin/
009: [jnavila@coriandre bin (master #)]$ ls
010: emacs  git-test-sequence  myemacs  pulseaudio  pulseaudio_airplay
011: [jnavila@coriandre bin (master #)]$ cd ..
012: [jnavila@coriandre test (master #)]$ git add bin
013: [jnavila@coriandre test (master #)]$ git commit
014: Waiting for Emacs...
015: [master (root-commit) 30dd8fa] premier import
016:  5 files changed, 148 insertions(+), 0 deletions(-)
017:  create mode 120000 bin/emacs
018:  create mode 100755 bin/git-test-sequence
019:  create mode 100755 bin/myemacs
020:  create mode 100755 bin/pulseaudio
021:  create mode 100755 bin/pulseaudio_airplay
022: [jnavila@coriandre test (master)]$ git branch toto
023: [jnavila@coriandre test (master)]$ emacs bin/pulseaudio
024: Waiting for Emacs...
025: [jnavila@coriandre test (master *)]$ git add bin/pulseaudio
026: [jnavila@coriandre test (master +)]$ git commit
027: Waiting for Emacs...
028: [master ba78a66] modif pulseaudio
029:  1 files changed, 0 insertions(+), 3 deletions(-)
030: [jnavila@coriandre test (master)]$ git checkout toto
031: Switched to branch 'toto'
032: [jnavila@coriandre test (toto)]$ git mv bin/pulseaudio pulse
033: [jnavila@coriandre test (toto +)]$ git commit
034: Waiting for Emacs...
035: [toto 81a7775] déplacement pulse en pulseaudio
036:  1 files changed, 0 insertions(+), 0 deletions(-)
037:  rename bin/pulseaudio => pulse (100%)
038: [jnavila@coriandre test (toto)]$ git merge master
039: Merge made by recursive.
040:  pulse |    3 ---
041:  1 files changed, 0 insertions(+), 3 deletions(-)
042: [jnavila@coriandre test (toto)]$

Voyons par le menu ce qui se passe :

  • Lignes 1 à 4 : création d'un répertoire de test et initialisation git
  • Lignes 5 à 11 : population du projet et petite visite des fichiers disponibles
  • Lignes 12 à 21 : premier commit sur la branche master , c'est la racine de master avec tous les fichiers
  • Lignes 22 : création d'une branche toto (sans basculer dessus). On se la garde pour plus tard.
  • Lignes 23 à 29 : édition du fichier bin/pulseaudio dans lequel 3 lignes ont été effacées, et commit du résultat
  • Lignes 30 à 31 : basculement sur la branche toto
  • Ligne 32 : déplacement de bin/pulse_audio en pulse
  • Lignes 33 à 37 : commit du résultat. Git indique un "rename" du fichier
  • Ligne 38 : Maintenant, il est temps de mettre Git à l'épreuve. Que se passe-t-il si je demande la fusion de la branche master. Remarquez bien que sur master, le fichier a subi une modification en place, tandis que sur la branche toto, le fichier a été déplacé. Vouloir appliquer un patch généré à partir du diff de master sur toto n'aurait aucun sens.
  • Lignes 39 à 41 : Git fait bien ce que j'attendais de lui. Il applique la modification sur le fichier déplacé et efface les trois lignes de pulse

Voilà une manip' qui m'aurait fait frémir il y a quelques temps sous Subversion. Ici... même pas peur !

GodSlayer Thursday 20 September 2012 at 10:21 pm | | Logiciels libres
Used tags:

No comments

(optional field)
(optional field)
Remember personal info?
Small print: All html tags except <b> and <i> will be removed from your comment. You can make links by just typing the url or mail-address.