2011-12-16 7 views
5

Chciałbym stworzyć bardzo prosty skrypt, który będzie ostatecznie zostać wywołana przez inną aplikację, która aktualizuje lokalne repozytorium git:Czy mogę przechowywać poświadczenia git w zmiennych środowiskowych?

#!/bin/bash 

cd $1 
sudo git pull 

Podczas wykonywania tego jestem proszony o poświadczenia (jestem wyciągając z prywatnego repozytorium BitBucket).

Czy mogę (krótko) przechowywać referencje w zmiennych środowiskowych?

#!/bin/bash 

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

cd $1 
sudo git pull 

Powyższe nie działa. Czy cokolwiek? Mógłbym programowo zmodyfikować adres początkowy, ale wydaje się to nieco wykonalne.

+4

git nie używa danych uwierzytelniających, zależy od używanego transportu. Czy używasz git over ssh? Jeśli tak, powinieneś spojrzeć na klucze ssh. –

Odpowiedz

0

Git nie używa danych uwierzytelniających, lecz korzysta z wykorzystywanego transportu.

9

wiem, że to jest bardzo stare pytanie, ale czy naprawdę trzeba przekazać nazwę użytkownika i hasło do uwierzytelniania podstawowego HTTP można po prostu ustawić pomocnika tak:

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

Aktualizacja: Dodałem sleep 1 do funkcji . W niektórych środowiskach może być prawdopodobnie potrzebny ze względu na warunki wyścigu. Mam 2 maszyny wirtualne z systemem Debian Jessie. Miały taką samą architekturę, ale inny procesor i inną liczbę rdzeni. Na jednej z tych maszyn pomocnik działał bez subskrypcji sleep. Z drugiej strony nie było. Po kilku godzinach debugowania uruchamiam strace, aby zobaczyć, co się dzieje. I magicznie zaczęło działać. strace właśnie zrobiłem git trochę wolniej.

+0

Wielkie dzięki! Działa dobrze dla popychaczy opartych na HTTP! Dla SSH również głosowałbym na klucze. –

+0

Co robi tutaj użycie wykrzyknika w ''! F() '? Wygląda na to, że będzie to odniesienie do poprzedniego polecenia w historii. Użycie 'bash' do wykonania tego, co jest w łańcuchu pomocniczym, jako zwykłego polecenia, powoduje błąd z tą składnią. Jestem ciekawy, dlaczego to działa. – ely

+1

N/m - Rozumiem, że jest to unikalne dla gita, ale nie mogłem go znaleźć w dokumentacji git. Znak wykrzyknika mówi git, aby traktował opcję konfiguracji ciągu jako wykonywalny kod powłoki. Dla pomocnika poświadczeń na przykład, jeśli nie traktuje go jako pliku wykonywalnego, wówczas próbuje dołączyć ciąg do argumentu "poświadczenia" i podążać za nim innymi opcjami określonymi w łańcuchu. – ely