Ketika mengkloning repositori git dalam alat otomatis - ujung depan web, sistem CI, kadang-kadang doa klon git membuka prompt yang menanyakan nama pengguna dan kata sandi (misalnya, ketika mengkloning repo Github yang tidak ada atau pada simpul baru yang hilang kunci ssh ).
Bagaimana cara membuat git gagal (sebaiknya dengan pesan kesalahan yang masuk akal dan kode keluar) alih-alih menunggu proses server untuk memberikannya nama pengguna dan kata sandi?
git
automation
Tinrtkovic
sumber
sumber
Jawaban:
Di git versi 2.3 ada variabel lingkungan
GIT_TERMINAL_PROMPT
yang ketika disetel ke0
akan menonaktifkan meminta kredensial.Anda bisa mendapatkan lebih banyak info tentang itu di
man git
(setelah memperbarui ke versi git2.3
) atau di posting blog ini di github .Contoh:
git clone https://github.com/some/non-existing-repo
akan meminta nama pengguna & kata sandiGIT_TERMINAL_PROMPT=0 git clone https://github.com/some/non-existing-repo
akan gagal tanpa meminta nama pengguna & kata sandisumber
Jika Anda menggunakan otentikasi ssh, dan di linux, maka Anda dapat membuat penggantian perintah ssh untuk menonaktifkan ini.
Buat file bernama "sshnoprompt.sh" dengan:
ssh -oBatchMode=yes $@
Jadikan file ini dapat dieksekusi dengan
chmod +x sshnoprompt.sh
Lalu ketika memulai git:
GIT_SSH="sshnoprompt.sh" git clone foo@dummyserver:not_a_repo
Dan itu tidak akan membolehkan git interaktif bertanya atau pertanyaan - seharusnya tidak dapat meminta pengguna untuk apa pun.
sumber
Bekerja dari git versi 1.8.3.1;
git clone -c core.askPass $echo url/or/path/to/git/repo
Konfigurasi
core.askPass
berfungsi dengan meneruskan kontrol penanganan kredensial ke program yang disebutkan di atas. Namun karena$echo
tidak bisa melakukan apa pun kecuali output, upaya klon segera gagal dan pengalihan bash masing-masing berlaku. Kode ini hanya dipanggil jika repositori git terjadi secara pribadi, dan akan mem-pipe output kesalahan yang menyatakan bahwa otentikasi gagal untuk repositori tertentu. Anda dapat menguji ini terhadaphttps://github.com/git/git
repositori publik dengan repositori pribadi yang Anda ketahui.Untuk mempermanis kesepakatan, Anda bahkan tidak perlu referensi program seperti
echo
di tempat pertama. Melewati konfigurasi git-c core.askPass
tanpa input berikut masih akan menyebabkan kegagalan jika repositori terjadi secara pribadi karena kode tidak akan tahu program apa yang akan membongkar penanganan kredensial. Walaupun ini jelas merupakan metode yang lebih tua dan lebih sederhana daripada yang lain yang disebutkan di sini, saya tidak tahu apakah itu akan memiliki efek yang sama pada versi git yang lebih lama.sumber
$echo
adalah referensi variabel yang (tidak disetel) diperluas ke string kosong, jadi itu sama sekali tidak berarti. Jika Anda menaruhecho
di sana (tanpa tanda dolar), itu juga akan salah karena itu akan ditafsirkan sebagai lokasi repositori. Pasti begitu-c core.askPass=echo
.Bergantung pada bagaimana Anda menjalankan git, mengalihkan stdin atau stdout sehingga mereka tidak terhubung ke terminal akan menghentikan git dari meminta rincian dan hanya menyebabkan kesalahan.
Ini juga akan memungkinkan Anda untuk memunculkan kesalahan (atau setidaknya log) ke layanan web.
sumber
</dev/null
dannohup .. &
sepertinya tidak berhasil.