Admin/Dev

30
Sept.
2019

Astuce PHP & Git : Récupérer le hash du dernier commit d'un projet Git via PHP

Publié par sky

Vous le savez peut être, le site skymac.org est construit à partir d'un CMS dont je m'occupe depuis maintenant 15 ans. Le code de ce CMS, CaMykS est suivi via le logiciel Git. Accessoirement, il est aussi disponible sur la plateforme GitHub.

Et dans le cadre du développement du CMS, j'ai eu besoin de réaliser un micro-développement très spécifique. J'ai eu besoin de récupérer le hash du dernier commit réalisé sur le repository Git, via PHP.

Premièrement, voici la commande que j'utilise pour récupérer le dernier commit du projet dans lequel je suis, directement dans mon terminal.

git rev-parse --verify HEAD

Maintenant, afin de ne pas avoir à "déplacer" le script PHP dans le dossier, il faut pouvoir exécuter cette commande depuis n'importe où, en indiquant le dossier du projet.

git --git-dir="/Library/WebServer/camyks/.git" rev-parse --verify HEAD

Comme vous pouvez le voir, le dossier du projet CaMykS est dans le dossier WebServer de macOS. Mais le plus important, c'est de ne pas oublier de spécifier le dossier de Git ".git" qui se trouve dans le dossier du projet.

Pour l'exécuter depuis PHP, rien de plus simple, il existe la commande shell_exec qui permet d'exécuter une commande dans un terminal et d'en récupérer les résultats. L'utilisation de la commande shell_exec doit être bien bordée afin qu'il n'y ait pas de possibilité pour des personnes extérieures de lancer n'importe quelle commande.

Ici, il s'agit d'un script PHP qui sera exécuté sur un serveur local, uniquement par une personne autorisée, il n'y a donc aucun soucis de sécurité.

Pour utiliser la fonction, nous pourrions donc écrire, en PHP :

$hash = shell_exec('git --git-dir="/Library/WebServer/camyks/.git" rev-parse --verify HEAD');

Malheureusement, cette commande ne va pas toujours fonctionner. En effet, le chemin vers l'application git n'est pas toujours connu de l'application gérant le serveur web. La dernière astuce, afin que tout cela fonctionne toujours, est donc d'indiquer le chemin complet vers git.

Si vous ne connaissez le chemin, vous pouvez le demander dans votre terminal

which git

Sur macOS, il est localisé dans /usr/local/bin/.

Je modifie donc la commande en conséquence

$hash = shell_exec('/usr/local/bin/git --git-dir="/Library/WebServer/camyks/.git" rev-parse --verify HEAD');

Ici, PHP obtient enfin correctement la valeur du hash du dernier commit réalisé.

Evidemment, la problématique de cet article et la mise en place de la solution sont très spécifiques, mais l'ensemble des astuces peuvent être utilisées et adaptées pour de nombreuses autres actions.

 
 
Commentaires
Aucun commentaire pour le moment.

 

Poster un commentaire
En postant sur skymac.org, je m'engage à être courtois et à ce que mon message soit pertinent avec le sujet de l'article.
En outre, j'accepte, sans condition, que mon message soit refusé et supprimé si ces règles ne sont pas appliquées.
Ouvrir le panneau de gestion des cookies
Fermer le panneau
Ce site utilise des cookies pour assurer son bon fonctionnement. Il utilise aussi des cookies issues de services tiers permettant de proposer des fonctionnalités avancées. À tout moment, vous pouvez choisir quels services vous souhaitez activer ou refuser, afin de retirer votre consentement quant à l'utilisation des cookies.
 
Personnalisation des services
Vous êtes libre de choisir quels services vous souhaitez activer. En autorisant ces services tiers, vous acceptez le dépôt et la lecture de cookies et l'utilisation de technologies de suivi nécessaires à leur bon fonctionnement. En retirant votre consentement pour certains de ces services, certaines fonctionnalités du site peuvent ne plus fonctionner.
Navigation du site  En savoir plus
Le site écrit un cookie de session permettant son bon fonctionnement et aidant à la navigation. Il ne peut être désactivé.
Utilisation : 1 cookie, enregistre l'identifiant de la session.
Durée de vie : Le cookie est présent pendant toute la session sur le site. Il devient obsolète après 24 minutes d'inactivité.
Obligatoire
Popup Média
Afficher des vidéos depuis Yoube ou Dailymotion.
 
Tout accepter Tout refuser Gérer