github özel repo için 'terminal komut istemleri devre dışı' hatasıyla sonuç alın


187

Tarayıcımdan Github kullanıcı arayüzünü kullanarak özel repo exampleite / myprivaterepo oluşturdum.

Sonra (masaüstünde) go dizinime gittim ve klonladım:

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

Çok uzak çok iyi. Scheduler.go dosyasını oluşturdu, repo'ya eklendi ve itti.

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

Everythng iyi. Ama temiz bir dizüstü bilgisayara gittiğimde ve repoyu klonlamaya çalıştığımda bir hata aldım:

# 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

Dizüstü bilgisayarım neden kendi deposumdan nefret ediyor ve kaderini kabul etmesini nasıl sağlayabilirim? Teşekkürler.


10
Bu bir gohata değil , git"terminal komut istemleri devre dışı" döndürüyor. git clone https://github.com/examplesite/myprivaterepoDizüstü bilgisayarınızda koşabilir misiniz ?
JimB

1
Teşekkür ederim. Git klonu çalıştı. Sonra işe koyulun. Anlaşma ne? Her seferinde "pompayı doldurmak" zorunda mıyım yoksa bir şeyi yanlış mı yapılandırdım?
tomcam

1
@tomcam, github hesabına ssh anahtarları ekleyebilir ve başlangıçtan itibaren işe yarayacaksınız, bkz. help.github.com/articles/generating-ssh-keys
alex vasi

@alexvasi: bu sadece repoyu önce ssh üzerinden klonlarsa işe yarar, çünkü https://github.com/içe aktarma yolunun bulunup bulunmadığını soracaktır. Git işlemi kullanıcı adı / parola isteyebilmeli, bu yüzden dizüstü bilgisayar yapılandırmasında farklı bir şey olmalı - farklı kabuk, farklı .gitconfig, bir env değişkeni, vb.
JimB

Tüm bunlar bana yardımcı oldu, ancak cevaplanmış ve / veya çözülmüş olarak nasıl işaretleneceğinden emin değilim. İşte şimdiye kadar sahip olduğum şey.
tomcam

Yanıtlar:


175

go get, varsayılan olarak "terminal istemini" devre dışı bırakır. Git için bir ortam değişkeni ayarlanarak değiştirilebilir:

env GIT_TERMINAL_PROMPT=1 go get github.com/examplesite/myprivaterepo

307

Bunu son derece yararlı buldum ve sorunumu çözdü. Bu komut, 2FA'nızın işini yapmasına izin verir (ve kullanıcı adınızı ve şifrenizi girme zahmetinden kurtarır):

git config --global --add url."git@github.com:".insteadOf "https://github.com/"

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

2FA kullanmıyorsanız, yine de SSH kullanabilirsiniz ve bu işe yarayacaktır.

Düzenleme: katma --addtarafından önerildiği gibi bayrak slatunje .


12
Ben eklemenizi öneririz --add sen Örneğin olabilir Eğer mevcut ayarların üzerine kalmamak bayrağı:git config --global --add url."git@github.com:".insteadOf "https://github.com/"
slatunje

Teşekkürler slatunje, geri bildiriminize dayanarak cevabıma bayrak ekledi.
Wylliam Judd

5
Bu en iyi çözüm IMO'sudur. Kullanıcı adı / şifre yerine kimlik doğrulaması için SSH anahtarlarını kullanmak daha güvenli ve daha az çaba gerektirir (kurulumdan sonra)
bodecker

1
Bunu Windows'ta yapma. Sonunda hatayla sonuçlandım git@github.com: Permission denied (publickey). fatal: Could not read from remote repository..
Shital Shah

1
linux için de çalışır. ssh globaly kullanıyorsanız herkes için çalışmalı
Chiptus

39

1 - go getkomut satırında kimlik doğrulaması yapmayı reddeder. Bu yüzden git'deki kimlik bilgilerini önbelleğe almanız gerekir. Osx kullandığım için osxkeychain kimlik yardımcısını kullanabilirim.

2 Benim için 2FA etkin ve bu nedenle şifreyi doğrulamak için kullanamadı. Bunun yerine şifreyi kullanmak için kişisel bir erişim kodu oluşturmak zorunda kaldım.

  1. osxkeychain kimlik yardımcısını ayarla https://help.github.com/articles/caching-your-github-password-in-git/
  2. Şifrenizi kullanmak yerine TFA kullanıyorsanız, https://github.com/settings/tokens repo kapsamına sahip kişisel bir erişim kodu oluşturun.
  3. git, yalnızca parolayı önbelleğe almak için özel bir repo git clone https://github.com/user/private_repo klonladı ve kullanıcı adı için github.com kullanıcı adınızı ve parola için oluşturulan kişisel erişim belirtecinizi kullandı.
  4. Sadece klonlanmış repo kaldırıldı ve kredilerin önbelleğe alınmasını sağlamak için yeniden test edildi - git clone https://github.com/user/private_repove bu sefer krediler istenmedi.

    1. go get, kişisel erişim belirtecinin erişebileceği tüm depolarla çalışır. İzinler farklı olduğu için adımları diğer hesaplarla / jetonlarla tekrarlamanız gerekebilir.

1
2FA'm var ve bu benim için çalıştı - bir token (tam privs ile) oluşturdu, git clonekendi mevcut depolarımdan birini yaptı (aslında herkese açık), istendi username, GitHub kullanıcı adımı koy, sonra için oluşturulan jeton password- klonlanmış repoyu sildi, sonra go getkomutu yeniden düzenledi ve hepsi iyi oldu - teşekkürler! (OSX de burada)
Eric Dorsey

3
Bu da gerçekten harika çünkü jetonun kapsamını özel depolar için sadece "okumak" ile sınırlandırabilirsiniz, böylece bir şekilde vahşi bir görüntüye girse bile, sadece kodunuzu okuyabilir ve içine şeyler sokamazlar ve jetonu gerçekten kolayca iptal edin. Henüz otomatik son kullanma tarihi olup olmadığını hatırlayamıyorum.
dragon788

16

Sadece çok go gethızlı çalışmak ve işinizle birlikte hareket etmek istiyorsanız ...

Sadece dışa aktar GIT_TERMINAL_PROMPT=1

$ export GIT_TERMINAL_PROMPT=1
$ go get [whatever]

Şimdi sizden kabuk oturumunuzun geri kalanı için bir kullanıcı / geçiş isteyecektir. Senin bu koy .profileveya kurulum gitdaha kalıcı bir çözüm için yukarıdaki gibi.


16

Şikayet ediyor çünkü kullanmak sshyerine kullanması gerekiyor , httpsancak gitiniz hala https ile yapılandırılmış. temelde daha önce de belirtildiği gibi komut istemlerini etkinleştirmeniz veya git sshyerine kullanmak üzere yapılandırmanız gerekir https. aşağıdakileri çalıştırarak bunu yapmanın basit bir yolu:

git config --global --add url."git@github.com:".insteadOf "https://github.com/"

veya makinenizde zaten kullanıyorsanız ssh, en alttaki aşağıdaki satırı gitgüvenle düzenleyebilir ~/.gitconfigve ekleyebilirsiniz.

Not: Bu, tam olarak ne kullandığınıza bağlı olan tüm SVC, kaynak sürüm kontrolünü kapsar, github, gitlab, bitbucket)

# Enforce SSH
[url "ssh://git@github.com/"]
  insteadOf = https://github.com/
[url "ssh://git@gitlab.com/"]
        insteadOf = https://gitlab.com/
[url "ssh://git@bitbucket.org/"]
  insteadOf = https://bitbucket.org/
  • Şifre pompalarını devre dışı bırakmak istiyorsanız şifreyi önbelleğe almanız gerekir. Github parolanızı mac, windows veya linux'da önbelleğe alma hakkında daha fazla bilgi için lütfen bu sayfayı ziyaret edin .

  • Github hesabınıza ssh ekleme hakkında daha fazla bilgi için lütfen bu sayfayı ziyaret edin .

Ayrıca, daha da önemlisi, bu bir şirket veya kendiniz için özel bir havuzsa, bu tür depoların herkese açık olarak ifşa edilmesini önlemek için proxy veya sağlama toplamı veritabanını atlamanız gerekebilir.

Bunu yapmak için GOPRIVATE, go komutunun hangi modüllerin özel olduğunu düşündüğü (herkese açık olarak kullanılamaz) ve bu nedenle proxy veya sağlama toplamı veritabanını KULLANMAMASI gereken ortam değişkenini ayarlamanız gerekir .

Değişken, path.Matchmodül yolu öneklerinin virgülle ayrılmış bir desen listesidir (Go'ların aynı sözdizimi ). Örneğin,

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

Veya

go env -w GOPRIVATE=github.com/mycompany/*
  • Özel paketler / modüller sağlama toplamı doğrulama sorunlarının nasıl çözüleceği hakkında daha fazla bilgi için lütfen bu makaleyi okuyun .
  • Go 13 modülleri ve yeni geliştirmeler hakkında daha fazla bilgi için lütfen Go 1.13 Modülleri Sürüm notlarına bakın .

Unutulmaması gereken son bir şey, yine go getde kimlik doğrulaması ve getirme için yapılandırabilirsiniz https, yapmanız gereken tek şey aşağıdaki satırı eklemektir.$HOME/.netrc

machine github.com login USERNAME password APIKEY

Umarım bu topluluğa yardımcı olur ve başkalarının açıklanan sorunları hızlı bir şekilde çözmesi için zaman kazandırır. daha fazla destek veya yardım istemeniz durumunda lütfen yorum bırakmaktan çekinmeyin.


GOPRIVATE( go env -w GOPRIVATE=github.com/mycompany/*) benim için işe yarayan tek şeydi. Bunu biraz daha vurgulamak için kendi başlığı altına, hatta kendi cevabına koymayı önerebilirim.
Bernhard Barker

1

Gitconfig dosyanızı bu seçenekle yapılandırırsanız, daha sonra GitHub'ın diğer depolarını kopyalarken sorun yaşarsınız

git config --global --add url. "Git@github.com". Instead, "https://github.com/"

Bunun yerine, bu seçeneği kullanmanızı öneririm

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

ve özel deponuzdan bir erişim belirteci oluşturmayı unutmayın. Şifrenizi girmeniz istendiğinde erişim kodunu yapıştırmanız yeterlidir. Mutlu klon :)


0

Windows'da da aynı sorunu yaşadım "hatası: komut istemi çalıştırılamadı (çıkış kodu 1) ölümcül: ' https://github.com ' için kullanıcı adı okunamadı : Hata yok" giriş iletişim kutusu aracılığıyla github'a giriş yapmaya çalışıyor. Ben iletişim iptal edildiğinde git komut satırında oturum açma ve parola istedi ve iyi çalıştı.

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.