3
votes

Comment obtenir le dernier hachage de validation à distance?

Je souhaite récupérer le dernier hachage de commit sur le référentiel distant, quelle que soit la branche.

J'ai essayé git ls-remote et git ls-remote --tags mais les deux sont apparemment triés par nom de balise, qui ne permet pas de savoir quelle est la dernière en date.

Par exemple sur Github, vous pouvez accéder à Insights / Network et obtenir un graphique qui inclut toutes les branches et commits dans celles-ci - cependant, travailler dans cette interface graphique n'est évidemment pas idéal - mais les données devraient y être d'une manière ou d'une autre.

Existe-t-il un moyen d'obtenir le dernier hachage de commit à distance, indépendamment de la branche?

git

0 commentaires

3 Réponses :


4
votes

Vous pouvez utiliser git show avec des télécommandes:

git show -s --pretty='format:%ci %s %h' $(git branch -r) | sort -r | head -n 1

Vous montrera le dernier commit de origin/master

MODIFIER: Pour obtenir le dernier commit "absolu", je ferais quelque chose du genre:

git log -n 1 $(git branch -r)

qui enregistrera toutes les branches distantes ( git branch -r ). Mais je ne garderai que le premier commit ( -n 1 ).

Je ne suis pas trop sûr de l'ordre chronologique, mais sur mon dépôt, il semble me donner le dernier.

Une autre option, plus "oneliner-like" serait:

git show origin/master

Qui listera les derniers commits de chaque branche distante formatés de manière à ce que le la date est la première, puis triée (à la date) et en gardant la première


10 commentaires

Désolé. J'ai mal formulé ma question. Je veux obtenir le dernier hachage de commit sur n'importe quel commit sur n'importe quelle branche à distance. Est-ce que ça fait plus de sens? Je vais le modifier.


Remarque: Vous devrez peut-être d'abord git fetch , pour vous assurer que la branche de suivi est réellement synchronisée avec la dernière branche distante.


en effet @TimBiegeleisen


Modifié pour répondre à vos besoins @cbll


Cela n'obtiendra-t-il pas le dernier commit localement, plutôt que le dernier sur la télécommande?


SPOILER: Tous les commits sont enregistrés localement lorsque vous exécutez git fetch . Mais cela obtiendra tous les commits sur lesquels pointent les branches distantes, ce qui ne dit pas si ces commits sont accessibles par les branches locales


En un mot simplifié, un repo Git est composé d'un ensemble d'objets appelés commits, liés entre eux dans une liste chaînée. Il existe également des objets appelés "branches", qui ne sont qu'un fichier texte plat avec comme contenu un hachage de validation.


@padawin Je ne sais pas pourquoi, mais avec vos deux dernières commandes, je suis renvoyé fatal: argument non reconnu: -> , que je ne comprends pas ..


La sortie de git branch -r est-elle vide?


continuons cette discussion dans le chat .



3
votes

Les versions récentes de git (je ne sais pas laquelle - 2.14 ne l'a pas fait, 2.21) autorise une option "--sort" dans ls-remote. Vous pouvez facilement faire:

git rev-parse `git branch -r --sort=committerdate | tail -1`

Mais attention - s'il est nécessaire de regarder dans les objets pour réaliser le tri (comme dans l'exemple ci-dessus), les objets doivent être disponibles localement. Sinon, vous obtiendrez un message d'erreur "fatal: objet manquant". Assurez-vous donc de toujours faire un git fetch avant de l'utiliser.

Pour être honnête - car vous devez vous assurer que toutes les branches distantes sont récupérées localement avant de pouvoir utiliser ceci , ce n'est pas beaucoup mieux que de simplement faire git branch -r --sort = committerdate après une extraction. La seule différence évidente est que ls-remote montre directement le hachage de validation que vous recherchez, tandis qu'avec la branche git, vous devrez envelopper dans un git rev-parse comme ceci:

git ls-remote --sort=committerdate

p>


2 commentaires

+1 C'est la manière la plus simple de le faire. Comme alternative, vous pouvez inverser l'ordre de tri en préfixant la clé avec - et en utilisant head à la place: git rev-parse $ (git branch -r - sort = -committerdate | head -1)


Ouais, ta dernière commande semblait bien fonctionner pour moi. Je reçois malgré tout le dernier hachage de commit - mais comme vous le dites, je dois d'abord faire git fetch .



1
votes

Récupérer depuis la télécommande, "origin" par exemple,

git for-each-ref refs/tags --sort="-*committerdate" | head -1

Imprimer les informations de toutes les branches distantes sous "refs / remotes / origin",

git for-each-ref refs/remotes/origin --sort="-committerdate" | head -1


0 commentaires