2012-08-29 10 views
19

Sto scrivendo uno script di bash e ho bisogno di un test per vedere se esiste un determinato telecomando.Controlla se git remote esiste prima del primo invio

Supponiamo, per la concretezza, che voglio verificare se esiste il telecomando faraway. Se ho inviato qualcosa a faraway, posso fare if [ -d .git/refs/remotes/faraway ]; then .... Ma per quanto posso vedere, lo pseudonimo faraway può ancora essere definito anche se .git/refs/remotes/faraway non esiste.

Un'altra opzione è analizzare l'output di git remote e vedere se faraway viene visualizzato lì. Ma mi chiedo se c'è un modo più semplice per verificare se è definito faraway, indipendentemente dal fatto che esista .git/refs/remotes/faraway/.

risposta

32

Un solo pensiero: è possibile testare lo stato di uscita su git ls-remote faraway. Ciò imporrà effettivamente la comunicazione con il telecomando, invece di cercare la sua presenza o assenza localmente.

git ls-remote --exit-code faraway 
if test $? = 0; then 
    .... 
fi 
+7

Questo può essere semplificata in 'se lontana git ls-remote ...'. Il comando test non è necessario. – jordanm

+0

Eccellente. Grazie! Presumo che il modo standard per evitare di ottenere 'fatale ...' nell'output quando 'lontano 'non esiste è aggiungere' &>/dev/null' alla fine della prima riga? – apc

+0

@apc C'è un flag '--quiet' nella guida all'utilizzo, ma non è nella pagina man e non sembra fare nulla. – Christopher

11

Se il telecomando è definito in .git/config, si può evitare il ping sul server remoto con git remote.

if git remote | grep faraway > /dev/null; then 
    ... 
fi 
+7

Questa è una ricerca di sottostringa, quindi potrebbe dare falsi positivi se si dispone di altri telecomandi contenenti 'lontano». –

20

Un altro modo per controllare se faraway è definito in .git/config:

if git config remote.faraway.url > /dev/null; then 
    … 
fi 
+0

Ciò aiuta in particolare se si desidera impedire roundtrip remoti. – hakre

Problemi correlati