Nouveautés de Git 1.8.5

Nicola Paolucci
Nicola Paolucci
Retour à la liste

En attendant la prochaine livraison majeure de Git qui intègrera d'importantes mises à jour, examinons les notes de la dernière livraison : Git 1.8.5 est arrivé !

Voici les informations que j'ai trouvées dans les notes de livraison et qui me paraissaient intéressantes dans mon rôle d'utilisateur Git normal.

Oh, et si vous ne les avez pas encore lues, reportez-vous à mes précédentes notes sur les livraisons 1.8.2, 1.8.3 et 1.8.4.

Pointeurs d'installation habituels

J'ai l'habitude de fournir quelques pointeurs pour la mise à niveau, avec des mises en garde et des rappels concernant les gestionnaires de package qui, dans certains cas, peuvent retarder la distribution. Mais ce n'est pas de mon ressort. Quoi qu'il en soit, vous trouverez ci-dessous des instructions faciles à exécuter pour effectuer la mise à niveau :

  • Saisissez simplement brew update && brew upgrade git si vous utilisez Homebrew sous OSX.
  • Utilisez APT, un truc magique pour les distributions basées sur Ubuntu (je laisse les autres distributions comme exercice pour le lecteur).
  • Exécutez simplement le nouveau programme d'installation sous Windows (le port Windows est parfois ralenti, soyez donc patient si vous ne le trouvez pas immédiatement).

Le nouvel alias HEAD arrive enfin

C'était en préparation depuis un moment et c'est enfin arrivé : HEAD dispose d'un nouvel alias. Au lieu de saisir quatre majuscules, vous pouvez désormais utiliser « @ », par exemple, « git log @ ».

Amélioration de la commande rebase

La commande rebase a été améliorée :

  • Dans la feuille d'opération de la commande --interactive rebase, la liste des ID de commits sera désormais conforme à la longueur core.abbrev (core.abbrev est la configuration indiquant la longueur des empreintes abrégées des commits, la valeur par défaut étant 7).

  • Vous pouvez désormais personnaliser le comportement de git pull --rebase pour qu'il utilise l'aplatissage par défaut ou qu'il conserve les merges en remplaçant le paramètre pull.rebase par preserve. Pour en savoir plus sur le fonctionnement de cette commande et de rebase --preserve-merges, reportez-vous à la réponse donnée sur le site Stack Overflow (en anglais).

Petites améliorations de statut

Cette livraison inclut différentes améliorations de git status :

  • Certaines informations inutiles sur le statut ne sont plus imprimées pour les submodules pour lesquels submodule.$name.ignore est égal à « all ».

  • Lors de l'exécution de la commande cherry-pick, le commit d'origine sélectionné est indiqué.

  • La commande ne filtre pas la sortie préfixée par des marqueurs de commentaires #. Si vous avez besoin de scripts pour analyser la sortie de git status, mettez-les à présent à jour pour qu'ils utilisent git status --porcelain.

  • git status et git branch -v -v font désormais la différence entre une branche qui ne se base sur aucune autre branche, une branche synchronisée avec la branche sur laquelle elle se base et une branche configurée pour se baser sur une branche qui n'existe plus.

Comparaison pour les classes « all-but »

git diff --diff-filter pouvait déjà filtrer plusieurs classes de changements :

--diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]
    Select only files that are Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R), have their type
    (i.e. regular file, symlink, submodule, ...) changed (T), are Unmerged (U), are Unknown (X), or have had
    their pairing Broken (B). Any combination of the filter characters (including none) can be used. When *
    (All-or-none) is added to the combination, all paths are selected if there is any file that matches other
    criteria in the comparison; if there is no file that matches other criteria, nothing is selected.

Il est désormais possible d'utiliser les minuscules pour dire : afficher tout, sauf les classes suivantes.

Variables HTTP par site

  • Les variables « http.* » peuvent désormais être spécifiées par une URL appliquée par la configuration. Par exemple, la commande suivante désactive uniquement http.sslVerify en parlant avec ce site spécifique :
[http]
sslVerify = true
[http "https://weak.example.com/"]
sslVerify = false

Sensibilisation aux mouvements de submodules

La prise en charge des submodules s'améliore à chaque livraison. Cette fois, Git se voit doté d'une fonctionnalité de déplacement des submodules :

'git mv A B' when moving a submodule A has been taught to relocate its working tree and to adjust the paths in the .gitmodules file.

Performance, implémentation interne, etc.

  • Le transport HTTP essayera d'utiliser le TCP Keepalive lorsqu'il le pourra.

  • La commande git repack est désormais écrite en C.

Autres fonctionnalités utiles

Les notes de livraison contiennent d'autres fonctionnalités utiles :

  • La commande git whatchanged est obsolète, mais n'a pas été supprimée. Cette commande est moins mise en avant dans la partie générale de la documentation.
  • git cherry-pick comprend désormais la commande git cherry-pick - pour effectuer des sélections à partir de la branche précédente.
  • La commande xdg-open peut-être utilisée comme un arrière-plan de navigateur pour git web-browse (par conséquent, pour indiquer la sortie git help -w), le cas échéant.
  • Comme make -C <répertoire>, git -C <répertoire> ... indique à Git de se rendre à cet emplacement avant de faire quoi que ce soit.
  • Demandez à foo^{tag} de faire un peel d'un tag (c.-à-d., de le rendre non opérationnel) et d'échouer si « foo » n'est pas un tag. git rev-parse --verify v1.0^{tag} serait une manière plus pratique de dire test $(git cat-file -t v1.0) = tag.
  • git push --no-thin désactive réellement l'optimisation « thin pack transfer ».
  • Un pathspecs magique comme « :(icase)makefile » qui correspond à Makefile et à makefile et « :(glob)foo/**/bar » qui correspond à « bar » dans « foo » et tout sous-répertoire de « foo » peut être utilisé dans plusieurs emplacements.
  • git blame prend désormais en charge plusieurs options -L pour découvrir l'origine de plusieurs blocs de lignes.
  • Les clients de transport HTTP peuvent éventuellement demander d'enregistrer les cookies avec la variable de configuration http.savecookies.
  • git fetch (et la commande « git pull ») a appris à vérifier les variables de configuration fetch.prune et remote.*.prune et à se comporter comme si l'option de ligne de commande --prune avait été renseignée.

C'est tout pour l'instant. Dites-moi si vous avez trouvé cette mise à jour utile et restez à l'affût de mes prochains billets. Suivez-moi (@durdn) et l'incroyable équipe @AtlDevtools pour plus d'infos passionnantes sur DVCS.

Prêt à découvrir Git ?

Essayez ce tutoriel interactif.

Démarrez maintenant