dapatkan hasil dalam kesalahan 'terminal prompt dinonaktifkan' untuk github private repo

187

Saya membuat contoh pribadi repo / myprivaterepo menggunakan Github UI dari browser saya.

Lalu saya pergi ke direktori go saya (di desktop) dan mengkloningnya:

$ cd $GOPATH
$ go get github.com/examplesite/myprivaterepo

Sejauh ini baik. Membuat file scheduler.go, ditambahkan ke repo, dan didorong.

$ vim scheduler.go
$ git add scheduler.go
$ git commit
$ git push

Semuanya baik-baik saja. Tetapi ketika saya pergi ke laptop bersih dan mencoba mengkloning repo, saya mendapat kesalahan:

# Now on laptop, which doesn't yet know about the repo
$ cd $GOPATH
$ go get github.com/examplesite/myprivaterepo
# At this point it should ask for my user ID and password ,right? But it doesn't.
# Instead, this error occurs:
cd .; git clone https://github.com/examplesite/myprivaterepo /Users/tom/go/src/github.com/examplesite/myprivaterepo
Cloning into '/Users/tom/go/src/github.com/examplesite/myprivaterepo'...
fatal: could not read Username for 'https://github.com': terminal prompts disabled
package github.com/examplesite/myprivaterepo: exit status 128

Mengapa laptop saya membenci repo saya sendiri dan bagaimana saya bisa mendapatkannya untuk menerima nasibnya? Terima kasih.

Tomcam
sumber
10
Ini bukan gokesalahan, gitmengembalikan "terminal prompt dinonaktifkan". Bisakah Anda menjalankan git clone https://github.com/examplesite/myprivaterepodi laptop Anda?
JimB
1
Terima kasih. Klon git bekerja. Lalu pergi bekerja. Apa masalahnya? Apakah saya harus "memperbaiki pompa" seperti ini setiap kali atau apakah saya salah mengonfigurasi sesuatu?
tomcam
1
@ Tomcam, Anda dapat menambahkan kunci ssh ke akun github dan mulai bekerja dari awal, lihat help.github.com/articles/generating-ssh-keys
alex vasi
@alexvasi: itu hanya berfungsi jika dia mengkloning repo sendiri lebih dari ssh, karena akan meminta dari https://github.com/jika jalur impor tidak ada. Proses git harus dapat meminta nama pengguna / kata sandi, sehingga harus ada sesuatu yang berbeda dalam konfigurasi laptop - shell yang berbeda, berbeda.
Gitconfig
Semua ini telah membantu saya, tetapi saya tidak yakin bagaimana menandai sebagai dijawab dan / atau diselesaikan. Inilah yang saya miliki sejauh ini.
tomcam

Jawaban:

175

go get menonaktifkan "terminal prompt" secara default. Ini dapat diubah dengan menyetel variabel lingkungan dari git:

env GIT_TERMINAL_PROMPT=1 go get github.com/examplesite/myprivaterepo
Laut Shafreeck
sumber
307

Saya menemukan ini sangat membantu, dan itu memecahkan masalah saya. Perintah ini akan memungkinkan 2FA Anda untuk melakukan hal tersebut (dan menyelamatkan Anda dari kesulitan memasukkan nama pengguna dan kata sandi Anda):

git config --global --add url."[email protected]:".insteadOf "https://github.com/"

Sumber: http://albertech.blogspot.com/2016/11/fix-git-error-could-not-read-username.html

Jika Anda tidak menggunakan 2FA, Anda masih bisa menggunakan SSH dan ini akan berhasil.

Sunting: menambahkan --addbendera seperti yang disarankan oleh slatunje .

Wylliam Judd
sumber
12
Saya sarankan menambahkan flag --add agar Anda tidak menimpa pengaturan yang ada yang mungkin Anda miliki Sebagai contoh:git config --global --add url."[email protected]:".insteadOf "https://github.com/"
slatunje
Terima kasih slatunje, menambahkan bendera ke jawaban saya berdasarkan tanggapan Anda.
Wylliam Judd
5
Ini adalah solusi IMO terbaik. Lebih aman dan lebih mudah (sekali pengaturan) untuk menggunakan kunci SSH untuk auth alih-alih nama pengguna / kata sandi
bodecker
1
Jangan lakukan ini di Windows. Saya berakhir dengan kesalahan [email protected]: Permission denied (publickey). fatal: Could not read from remote repository..
Shital Shah
1
bekerja untuk linux juga. harus bekerja untuk semua orang jika Anda menggunakan ssh globaly
Chiptus
39

1 - go get akan menolak untuk mengotentikasi pada baris perintah. Jadi, Anda perlu cache kredensial di git. Karena saya menggunakan osx, saya bisa menggunakan kredensial osxkeychain.

2nd Bagi saya, saya telah mengaktifkan 2FA dan karenanya tidak dapat menggunakan kata sandi saya untuk auth. Alih-alih, saya harus membuat token akses pribadi untuk digunakan sebagai ganti kata sandi.

  1. setup osxkeychain helper kredensial https://help.github.com/articles/caching-your-github-password-in-git/
  2. Jika menggunakan TFA alih-alih menggunakan kata sandi Anda, buat token akses pribadi dengan cakupan repo https://github.com/settings/tokens
  3. git mengkloning repo pribadi hanya untuk membuatnya git clone https://github.com/user/private_repo men -cache kata sandi dan menggunakan nama pengguna github.com Anda untuk nama pengguna dan token akses pribadi yang dihasilkan untuk kata sandi.
  4. Menghapus repo yang baru dikloning dan menguji ulang untuk memastikan kredibilitas di-cache - git clone https://github.com/user/private_repodan kali ini tidak meminta kredibilitas.

    1. go get akan bekerja dengan repo apa pun yang dapat diakses token akses pribadi. Anda mungkin harus mengulangi langkah-langkah dengan akun / token lainnya karena izin berbeda-beda.
Mike Graf
sumber
1
Saya memiliki 2FA dan ini bekerja untuk saya - menghasilkan token (dengan privasi lengkap), melakukan git clonesalah satu dari repo saya sendiri yang sudah ada (sebenarnya publik), diminta untuk saya username, masukkan nama pengguna GitHub saya, kemudian dimasukkan ke dalam token yang dihasilkan untuk password- menghapus repo yang dikloning, lalu mengulang go getperintah dan semuanya baik-baik saja - terima kasih! (OSX di sini juga)
Eric Dorsey
3
Ini juga sangat bagus karena Anda dapat membatasi ruang lingkup token hanya untuk "membaca" untuk repo pribadi sehingga meskipun itu entah bagaimana masuk ke gambar di alam, mereka hanya dapat membaca kode Anda dan tidak mendorong sesuatu ke dalamnya dan Anda dapat mencabut token dengan sangat mudah. Saya tidak dapat mengingat apakah mereka memiliki tanggal kedaluwarsa otomatis.
dragon788
16

Jika Anda hanya ingin go getbekerja sangat cepat, dan bergerak bersama pekerjaan Anda ...

Ekspor saja GIT_TERMINAL_PROMPT=1

$ export GIT_TERMINAL_PROMPT=1
$ go get [whatever]

Sekarang akan meminta Anda untuk pengguna / pass untuk sisa sesi shell Anda. Letakkan ini di .profilepengaturan Anda gitseperti di atas untuk solusi yang lebih permanen.

EdH
sumber
16

Ia mengeluh karena harus digunakan sshalih-alih httpstetapi git Anda masih dikonfigurasi dengan https. jadi pada dasarnya yang lain disebutkan sebelumnya Anda perlu baik memungkinkan petunjuknya atau mengkonfigurasi git untuk menggunakan sshbukan https. cara sederhana untuk melakukan ini dengan menjalankan yang berikut:

git config --global --add url."[email protected]:".insteadOf "https://github.com/"

atau jika Anda sudah menggunakan sshdengan gitdi mesin Anda, Anda dapat dengan aman mengedit ~/.gitconfigdan menambahkan baris berikut di bagian paling bawah

Catatan: Ini mencakup semua SVC, kontrol versi sumber, yang tergantung pada apa yang Anda gunakan, github, gitlab, bitbucket)

# Enforce SSH
[url "ssh://[email protected]/"]
  insteadOf = https://github.com/
[url "ssh://[email protected]/"]
        insteadOf = https://gitlab.com/
[url "ssh://[email protected]/"]
  insteadOf = https://bitbucket.org/
  • Jika Anda ingin menjaga agar kata sandi dinonaktifkan, Anda perlu menyimpan kata sandi. Untuk informasi lebih lanjut tentang cara men-cache kata sandi github Anda di mac, windows atau linux, silakan kunjungi halaman ini .

  • Untuk informasi lebih lanjut tentang cara menambahkan ssh ke akun github Anda, silakan kunjungi halaman ini .

Selain itu, yang lebih penting, jika ini adalah repositori pribadi untuk perusahaan atau untuk Anda sendiri, Anda mungkin perlu melewati menggunakan proksi atau basis data checksum untuk repo tersebut agar tidak memaparkannya kepada publik.

Untuk melakukan ini, Anda perlu mengatur GOPRIVATEvariabel lingkungan yang mengontrol modul mana yang dianggap perintah pribadi (tidak tersedia untuk umum) dan karenanya TIDAK boleh menggunakan database proxy atau checksum.

Variabelnya adalah daftar pola yang dipisahkan koma (sintaks yang sama dengan Go path.Match) dari awalan jalur modul. Sebagai contoh,

export GOPRIVATE=*.corp.example.com,github.com/mycompany/*

Atau

go env -w GOPRIVATE=github.com/mycompany/*
  • Untuk informasi lebih lanjut tentang cara menyelesaikan masalah validasi paket / modul privat, silakan baca artikel ini .
  • Untuk informasi lebih lanjut tentang go 13 modul dan perangkat tambahan baru, silakan baca Go 1.13 Catatan modul Rilis .

Satu hal terakhir yang tidak lupa untuk disebutkan, Anda masih dapat mengonfigurasi go getuntuk mengautentikasi dan mengambil alih https, yang perlu Anda lakukan adalah menambahkan baris berikut ke$HOME/.netrc

machine github.com login USERNAME password APIKEY
  • Untuk akun GitHub, kata sandi dapat menjadi token akses pribadi .
  • Untuk informasi lebih lanjut tentang cara melakukan ini, silakan periksa halaman Go FAQ .

Saya harap ini membantu komunitas dan menghemat waktu orang lain untuk menyelesaikan masalah yang dijelaskan dengan cepat. jangan ragu untuk meninggalkan komentar jika Anda ingin lebih banyak dukungan atau bantuan.

Muhammad Soliman
sumber
GOPRIVATE( go env -w GOPRIVATE=github.com/mycompany/*) adalah satu-satunya hal yang berhasil untuk saya. Saya mungkin menyarankan menempatkan itu di bawah judulnya sendiri atau bahkan dalam jawabannya sendiri untuk menyoroti sedikit lebih banyak.
Bernhard Barker
1

Jika Anda mengonfigurasi gitconfig Anda dengan opsi ini, nanti Anda akan memiliki masalah dalam mengkloning repo GitHub lainnya.

git config --global --add url. "[email protected]". Instead, "https://github.com/"

Sebagai gantinya, saya sarankan Anda menggunakan opsi ini

echo "export GIT_TERMINAL_PROMPT=1" >> ~/.bashrc || ~/.zshrc

dan jangan lupa untuk membuat token akses dari repositori pribadi Anda. Saat diminta memasukkan kata sandi Anda, cukup tempel token akses. Selamat mengkloning :)

cooljl86
sumber
0

Saya mempunyai masalah yang sama di windows "error: gagal menjalankan skrip prompt (kode keluar 1) fatal: tidak dapat membaca Nama Pengguna untuk ' https://github.com ': No error" mencoba masuk ke github melalui dialog login. Ketika saya membatalkan dialog git meminta saya untuk login dan kata sandi di baris perintah dan itu berfungsi dengan baik.

Nick Proto
sumber