Sinossi
git ls-remote [--heads] [--tags] [<repository> [<refs>...]]
Descrizione
Il comando git ls-remote interroga un remote (senza clone o fetch) e stampa lo SHA-1 di ogni ref accanto al nome del ref. È prezioso per scripting, pipeline CI e ispezione veloce — per esempio, trovare l'ultimo tag su un remote o controllare se un branch esiste. Poiché non scarica oggetti, è leggero e veloce anche contro repository molto grandi.
Puoi passare un URL direttamente senza prima configurare un remote: git ls-remote https://github.com/user/repo.git. Questo lo rende ideale per ispezione una tantum o script di build che risolvono una versione "latest".
Nell'uso quotidiano, git ls-remote si integra con alias e CI.
Capire il modello dati di Git aiuta a prevedere i risultati.
Opzioni comuni
| Opzione | Descrizione |
|---|---|
--heads / -h | Limita l'output ai ref dei branch. |
--tags / -t | Limita l'output ai ref dei tag. |
--refs | Filtra il peel dereferenziato dei tag annotated. |
--symref | Mostra a cosa puntano i ref simbolici (come HEAD). |
--exit-code | Esce con codice non-zero se nessun ref corrispondente è trovato. |
--sort=<key> | Ordina i risultati per versione, refname, ecc. |
Esempi
git ls-remote --heads origin
# Elenca tutti i branch su origin con i loro SHA
git ls-remote --tags --refs origin
# Elenca tutti i tag (saltando le dereferenze ^{})
git ls-remote https://github.com/git/git.git HEAD
# Mostra a cosa punta HEAD su un repo pubblico
git ls-remote --sort=-v:refname --tags origin 'v*' | head -1
# Trova il tag semver più alto
Errori comuni
Parsare l'output senza --refs mostra i tag annotated due volte (una come oggetto tag, una come name^{} per il commit sottostante). Usa --refs per sopprimere le righe peeled. L'autenticazione può fallire silenziosamente contro repo privati senza un credential helper — testa interattivamente prima.
Comandi correlati
git remote, git fetch, git tag, git for-each-ref