Comment puis-je obtenir l’ID de validation associé à un sous-module git à partir d’une validation passée dans le clone parent?

Existe-t-il un moyen, en fait, de ne pas extraire la validation parent, pour déterminer l’ID de validation SHA-1 d’un sous-module basé sur un ID de validation dans le clone parent? Je sais que je peux trouver le SHA-1 actuellement associé avec «git submodule».

Voici un exemple: J’ai un clone avec un seul sous-module «foo» qui a changé plusieurs fois au cours du mois dernier. J’ai un tag dans le clone parent qui date de quelques semaines et qui s’appelle ‘release-1.2.3’. Je veux savoir ce que le SHA-1 associé à «foo» était pour ce commit marqué. Je pouvais simplement vérifier ‘releases-1.2.3’ et utiliser git-submodule pour voir, mais je me demande s’il existe un moyen de le faire sans affecter l’arbre de travail, car je veux le scripter.

Je veux faire cela parce que je veux construire un script pour faire un «diff» sur toutes les modifications dans un sous-module entre deux commits dans le repository parent – c.-à-d. le parent.”

Vous pouvez utiliser git-ls-tree pour voir quel était l’identifiant SHA-1 d’un chemin donné pendant une validation donnée:

 $ git ls-tree released-1.2.3 foo 160000 commit c0f065504bb0e8cfa2b107e975bb9dc5a34b0398 foo 

(Ma première pensée a été git show released-1.2.3 foo , mais cela échoue avec “fatal: mauvais object”.)

Puisque vous écrivez la sortie, vous voudrez probablement récupérer uniquement l’identifiant SHA-1, par exemple:

 $ git ls-tree released-1.2.3 foo | awk '{print $3}' c0f065504bb0e8cfa2b107e975bb9dc5a34b0398 

Aussi: Lorsque vous écrivez des scripts autour de git, essayez de vous en tenir aux commandes de plomberie , comme décrit dans le manuel. Ils ont une interface plus stable, tandis que les commandes «porcelaines» plus familières risquent de changer de manière incompatible.

Celui-ci a travaillé pour moi:

 $ git rev-parse released-1.2.3^{commit}:foo  

Peut-être aussi assez facile à utiliser en script.

J’ai trouvé une avenue prometteuse:

 $ git log --raw .. --submodule --  

Avec l’option –raw, cela imprime les identifiants SHA-1 (abrégés) correspondant aux validations associées au sous-module. Malheureusement, le résultat est très verbeux et nécessitera du travail pour être traité dans un script.

Ce dont j’ai vraiment besoin, c’est d’une fonction git qui, avec un ID de validation parent, me donne la dernière modification apscope à un sous-module avant cette validation. C’est-à-dire que le sous-module SHA-1 «mise à jour du sous-module git» devrait vérifier si je devais valider ce parent.

git slave (gits) pourrait être votre réponse.

http://gitslave.sourceforge.net/

Mais vous pouvez aussi le faire avec git .. ce n’est pas aussi facile.