2011-12-16 8 views
5

Mi piacerebbe creare un semplice script di shell, che in ultima analisi essere chiamato da un'altra applicazione, che aggiorna un repository git locale:Posso conservare credenziali git nelle variabili di ambiente?

#!/bin/bash 

cd $1 
sudo git pull 

Durante l'esecuzione di questo ho chiesto di credenziali (io sono prelevando da un repository privato di BitBucket).

Posso (brevemente) memorizzare le credenziali nelle variabili di ambiente?

#!/bin/bash 

export GIT_USERNAME=<user> 
export GIT_PASSWORD=<pass> 

cd $1 
sudo git pull 

Quanto sopra non funziona. Farebbe qualcosa? Potrei modificare a livello di codice l'url di origine ma sembra un po 'eccessivo.

+4

git non utilizza le credenziali, si basa sul trasporto utilizzato. Stai usando git su ssh? Se è così dovresti guardare le chiavi ssh. –

risposta

0

Git non utilizza le credenziali, si basa sul trasporto utilizzato.

9

So che è molto vecchia questione, ma se si ha realmente bisogno di passare il nome utente e la password per l'autenticazione di base HTTP si può semplicemente impostare helper in questo modo:

git config credential.helper '!f() { sleep 1; echo "username=${GIT_USER}\npassword=${GIT_PASSWORD}"; }; f' 

UPDATE: ho aggiunto sleep 1 alla funzione . In alcuni ambienti potrebbe essere probabilmente necessario a causa delle condizioni della gara. Ho 2 macchine virtuali che eseguono Debian Jessie. Avevano la stessa architettura ma una CPU diversa e un diverso numero di core. Su una di queste macchine l'helper stava funzionando bene senza sleep. D'altra parte non lo era. Dopo alcune ore di debug eseguo strace per vedere cosa sta succedendo. E ha iniziato magicamente a funzionare. strace appena fatto andare un po 'più lentamente.

+0

Grazie mille! Funziona bene per push basati su HTTP! Per SSH, vorrei anche votare le chiavi. –

+0

Cosa fa qui l'uso del punto esclamativo in ''! F()'? Sembra che questo sarebbe un riferimento a un comando precedente nella storia. L'uso di 'bash' per eseguire ciò che si trova nella stringa helper come un semplice comando causa comunque un errore con questa sintassi. Sono curioso del perché funzioni. – ely

+1

N/m - Ora vedo che questo è univoco per git, ma non sono riuscito a trovarlo nella documentazione di git. Il punto esclamativo indica a git di trattare l'opzione di configurazione della stringa come codice shell eseguibile. Per l'helper delle credenziali, ad esempio, se non lo considera come eseguibile, tenta di aggiungere la stringa all'argomento 'credenziali' e seguirla con altre opzioni specificate nella stringa. – ely

Problemi correlati