Comment obtenir SHA de la dernière validation depuis le repository distant git?

Est-ce que quelqu’un sait comment obtenir le dernier SHA d’une twig donnée en dehors d’ un repository git?

Si vous êtes dans un repository git, vous pouvez faire:

git log origin/branch_X | head -1 

Cependant, je ne suis pas dans un repository git, et je voudrais éviter de devoir clone un repository simplement pour obtenir le dernier SHA d’une balise / twig. Y a-t-il une manière intelligente de le faire?

Si vous souhaitez vérifier SHA-1 d’une twig donnée dans un référentiel distant, votre réponse est correcte:

 $ git ls-remote  

Cependant, si vous êtes sur le même système de fichiers, une solution plus simple (ne nécessitant pas d’extraire SHA-1 de la sortie) serait simplement:

 $ git --git-dir=/path/to/repo/.git rev-parse origin/branch_X 

Voir la page de --git-dir git (1) pour une description de l’ --git-dir .

Utiliser le rev-parse

 git rev-parse origin/master # to get the latest commit on the remote git rev-parse HEAD # to get the latest commit on the local 

Un de mes collègues m’a répondu ceci:

 git ls-remote ssh://git.dev.pages/opt/git/repos/dev.git  

-Steve

En utilisant une URL git:

 $ git ls-remote  | head -1 | sed "s/HEAD//" 

Utiliser un répertoire sur un système accessible:

 $ git --git-dir=/path/to/repo/.git rev-parse origin/ 

Cela devrait faire l’affaire git ls-remote REMOTE | awk "/BRANCH/ {print \$1}" git ls-remote REMOTE | awk "/BRANCH/ {print \$1}"

Remplacez REMOTE par le nom du référentiel distant et BRANCH par le nom de la twig.

Comme mentionné dans les commentaires ci-dessus, cela devrait être la meilleure solution:

$ git ls-remote | head -1 | cut -f 1

Si vous voulez juste le SHA-1 de la twig actuellement extraite de votre repo local, vous pouvez simplement spécifier HEAD au lieu de origin / branch_X:

git --git-dir=/path/to/repo/.git rev-parse --verify HEAD

Les références aux têtes de twigment sont stockées dans l’ .git/refs/ . Vous devriez donc pouvoir trouver le hachage du dernier commit à:

 cat .git/refs/remotes/origin/branch_X 

Votre chemin peut légèrement différer.

Voici une solution de copier-coller qui fonctionne dans le référentiel.

 origin_head=$(git ls-remote --heads $(git config --get remote.origin.url) | grep "refs/heads/master" | cut -f 1) if [ $origin_head != "$(git rev-parse HEAD)" ]; then echo >&2 "HEAD and origin/master differ." exit 1 fi 

Je recommande de récupérer les informations liées uniquement à une twig donnée, puis d’parsingr pour obtenir la dernière version de sha:
git ls-remote --tags | awk '{print $1;}'