git clone - kimlik bilgileri istemek yerine başarısız


15

Otomatikleştirilmiş araçlarda git depolarını klonlarken - web ön uçları, CI sistemleri, bazen git klon çağırma, kullanıcı adı ve parola isteyen bir istem açar (örneğin, var olmayan bir Github deposunu klonlarken veya ssh tuşlarını eksik olan yeni bir düğümde) ).

Sunucu işleminin kullanıcı adı ve parola vermesini beklemek yerine git'in başarısız olmasını (tercihen mantıklı bir hata iletisi ve çıkış koduyla) nasıl yapabilirim?


Ssh anahtarlarını eksik yeni bir sunucuda çalıştırılırsa öldürülene kadar can sıkıcı bir şekilde bekleyen bir çok sunuculu Jenkins kurduk - bir mesajla başarısız olacak ve sıfır olmayan çıkış kodu olacağını yapılandırmanın bir yolu Bir işe yara.
Danny Staple

Ana bilgisayar anahtarları istemine izin vermemek için bir yakalama tüm "toplu" modu kullanılabilirse - bu ideal olacaktır.
Danny Staple

Bunların her ikisi de ilgilidir - onları bir araya getirmeye çalışmak - serverfault.com/questions/61915/… , stackoverflow.com/questions/7772190/… .
Danny Staple

Yanıtlar:


16

Git sürüm 2.3'te kimlik bilgileri istenmesini devre dışı bırakacak bir ortam değişkeni GIT_TERMINAL_PROMPTvardır 0.

Bununla ilgili daha fazla bilgiyi man git(git sürümüne güncelledikten sonra 2.3) veya github'daki bu blog yayınında bulabilirsiniz .

Örnekler:

  • git clone https://github.com/some/non-existing-repo kullanıcı adı ve şifre isteyecektir
  • GIT_TERMINAL_PROMPT=0 git clone https://github.com/some/non-existing-repo kullanıcı adı ve şifre sormadan başarısız olur

Git 1.8 ile bir el7 sunucusunda bir https git klonu ile buraya olmak sinir bozucu. Diğer repo'dan 2.0'a güncelleme yapmanın bir seçenek olup olmadığını kontrol edecek.
Danny Staple

0

Ssh kimlik doğrulaması ve linux üzerinde kullanıyorsanız, bunu devre dışı bırakmak için bir ssh komutu değiştirme oluşturabilirsiniz.

Şununla "" sshnoprompt.sh "adlı bir dosya oluşturun:

ssh -oBatchMode=yes $@

Bu dosyayı şununla çalıştırılabilir yap: chmod +x sshnoprompt.sh

Sonra git başlarken:

GIT_SSH="sshnoprompt.sh" git clone foo@dummyserver:not_a_repo

Ve herhangi bir etkileşimli git istemine veya sorusuna izin vermez - kullanıcıdan hiçbir şey isteyemez.


0

Git sürüm 1.8.3.1'den çalışma;

git clone -c core.askPass $echo url/or/path/to/git/repo

Yapılandırma core.askPass, kimlik bilgilerinin taşınması denetimini yukarıda belirtilen programa geçirerek çalışır. Ancak $echoçıktı dışında hiçbir şey yapamadığından, klon girişimi derhal başarısız olur ve ilgili bash yeniden yönlendirmesi uygulanır. Bu kod yalnızca git deposunun özel olması durumunda çağrılır ve belirli bir havuz için kimlik doğrulamanın başarısız olduğunu belirten hata çıktısını iletir. Bunu, https://github.com/git/gitbildiğiniz özel bir depoya karşı halka açık depoda test edebilirsiniz .

Anlaşmayı tatlandırmak için echo, ilk etapta olduğu gibi bir programa başvurmanız bile gerekmez . -c core.askPassAşağıdaki yapılandırmaya sahip olmayan git yapılandırmasının geçilmesi , kodun kimlik bilgileri işlemeyi hangi programa yükleyeceğini bilmeyeceği için havuzun özel olması durumunda yine de hataya neden olur. Bu kesinlikle burada belirtilenlerden daha eski ve daha basit bir yöntem olsa da, git'in eski sürümlerinde aynı etkiye sahip olup olmayacağını bilmiyorum.


Çok yanlışken biraz haklısın. Her şeyden önce, sizin durumunuzda $echo(ayarlanmamış) boş dizeye genişleyen değişken bir referanstır, bu yüzden tamamen anlamsızdır. Eğer echooraya koyarsanız (dolar işareti olmadan), depo konumu olarak yorumlanacağı için de yanlış olur. Olmak zorundaydı -c core.askPass=echo.
Michał Górny

-1

Git'i nasıl çalıştırdığınıza bağlı olarak, stdin veya stdout'u terminallere bağlı olmayacak şekilde yönlendirmek git'in ayrıntı istemesini durduracak ve sadece hataya neden olacaktır.

Bu aynı zamanda web hizmetindeki hataları (veya en azından günlükleri) ortaya çıkarmanıza izin verir.


Bunu tam olarak nasıl yapardım? İlk Bash Bunu gerçekleştirmek için çalışıyorum, hem </dev/nullve nohup .. &işe görünmüyor.
Tin Tvrtković

Bu cevap, bunu nasıl başaracağına dair belirli bir örnek olmadan yararlı değildir. Özellikle de 'bariz' yöntemler yukarıda belirtildiği gibi çalışmaz.
Michał Górny

@ MichałGórny OP'nin sorusunu birkaç yıl önce görmemiştim, ancak soruda (OS, Toolset) buna cevap verebilecek yeterli bilgi yoktu. Stdin ve stdout yönlendiriliyor. Git, soru sorulduğundan beri çok değişti (örneğin, Windows'ta, Azure DevOps'a bağlanıyorsanız kimlik bilgileri için harici iletişim kutuları açılır), böylece üst yanıtta listelenen ortam değişkenini kullanmaktan daha iyi olursunuz
Matthew Steeples
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.