github private repo에 대한 'terminal prompts disabled'오류가 발생합니다.


187

브라우저에서 Github UI를 사용하여 개인 저장소 examplesite / myprivaterepo를 만들었습니다.

그런 다음 바탕 화면의 go 디렉토리로 이동하여 복제했습니다.

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

여태까지는 그런대로 잘됐다. scheduler.go 파일을 작성하고 repo에 추가 한 후 푸시했습니다.

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

Everythng는 괜찮습니다. 그러나 깨끗한 노트북에 가서 저장소를 복제하려고 할 때 오류가 발생했습니다.

# 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

왜 내 노트북이 내 레포를 싫어하고 있으며 어떻게 운명을 받아 들일 수 있습니까? 감사.


10
이것은 go오류 가 아니며 git"터미널 프롬프트 비활성화 됨"을 반환하는 것입니다. 당신 git clone https://github.com/examplesite/myprivaterepo은 당신의 노트북에서 실행할 수 있습니까 ?
JimB

1
감사합니다. 자식 복제본이 작동했습니다. 그런 다음 이동이 작동합니다. 거래는 무엇입니까? 매번 이와 같이 "펌프를 프라이밍"해야합니까, 아니면 뭔가 잘못 구성 했습니까?
tomcam

1
@tomcam, github 계정에 ssh 키를 추가하면 처음부터 작동합니다. help.github.com/articles/generating-ssh-keys
alex vasi

@alexvasi : https://github.com/가져 오기 경로가 존재하지 않는 경우 요청하기 때문에 ssh를 통해 repo를 복제 한 경우에만 작동 합니다. git 프로세스는 사용자 이름 / 암호를
물어볼

이 모든 것이 저에게 도움이되었지만 답변 및 / 또는 해결 된 것으로 표시하는 방법을 잘 모르겠습니다. 여기까지 내가 가진 것입니다.
tomcam

답변:


173

go get은 기본적으로 "터미널 프롬프트"를 비활성화합니다. git의 환경 변수를 설정하여 변경할 수 있습니다.

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

307

나는 이것이 매우 도움이되었고 내 문제를 해결했다. 이 명령을 사용하면 2FA가 작업을 수행 할 수 있습니다 (사용자 이름과 비밀번호를 입력하지 않아도됩니다).

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

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

2FA를 사용하지 않는 경우에도 SSH를 사용할 수 있으며 작동합니다.

편집 : slatunje가--add 제안한대로 플래그를 추가했습니다 .


12
기존 설정을 덮어 쓰지 않도록 --add 플래그를 추가하는 것이 좋습니다. 예 :git config --global --add url."git@github.com:".insteadOf "https://github.com/"
slatunje

감사합니다 slatunje, 귀하의 의견에 따라 내 답변에 깃발을 추가했습니다.
Wylliam Judd '10

5
이것이 최고의 솔루션 IMO입니다. 그것은 더 안전하고 더 적은 노력의 대신에 사용자 이름 / 암호 인증에 대한 SSH 키를 사용하기 (설정 회)
bodecker

1
Windows에서는이 작업을 수행하지 마십시오. 나는 오류로 끝났다 git@github.com: Permission denied (publickey). fatal: Could not read from remote repository..
Shital Shah

1
리눅스에서도 작동합니다. ssh globaly를 사용하는 경우 모두를 위해 일해야합니다
Chiptus

39

첫 번째- go get명령 줄에서 인증을 거부합니다. 따라서 자격 증명을 git에 캐시해야합니다. osx를 사용하기 때문에 osxkeychain 자격 증명 도우미를 사용할 수 있습니다.

2nd 나를 위해, 2FA를 사용하도록 설정 했으므로 비밀번호를 사용하여 인증 할 수 없습니다. 대신 암호 대신 사용할 개인 액세스 토큰을 생성해야했습니다.

  1. osxkeychain 자격 증명 도우미 https://help.github.com/articles/caching-your-github-password-in-git/ 설정
  2. 비밀번호 대신 TFA를 사용하는 경우 저장소 범위가 https://github.com/settings/tokens 인 개인 액세스 토큰을 생성 하십시오.
  3. git은 개인 저장소를 복제하여 암호를 캐시하고 git clone https://github.com/user/private_repo 사용자 이름으로 github.com 사용자 이름을 사용 하고 암호로 생성 된 개인 액세스 토큰을 사용했습니다.
  4. 방금 복제 된 리포지토리를 제거하고 다시 테스트하여 크리드가 캐시되었는지 확인 git clone https://github.com/user/private_repo했습니다. 이번에는 크리드를 요구하지 않았습니다 .

    1. go get은 개인 액세스 토큰이 액세스 할 수있는 모든 저장소와 함께 작동합니다. 권한이 다양하므로 다른 계정 / 토큰으로 단계를 반복해야 할 수도 있습니다.

1
나는 2FA를 가지고 있었고 이것은 나를 위해 일했다-토큰을 생성했다 (전체 privs와 함께), git clone내 자신의 기존 repos 중 하나 (실제로 공개되어 있음) 중 하나를 수행 username했다. 에 대한 토큰 생성 password-복제 된 저장소를 삭제 한 다음 go get명령 을 다시 실행하면 모든 것이 잘되었습니다. 감사합니다! (OSX도 여기)
Eric Dorsey 2016 년

3
토큰의 범위를 개인 저장소에 대해서만 "읽기"로 제한 할 수 있기 때문에 실제로는 이미지가 어쨌든 이미지에 들어가더라도 코드를 읽을 수만 있고 내용을 푸시 할 수 없으며 토큰을 정말 쉽게 취소하십시오. 아직 자동 만료가 내장되어 있는지 기억할 수 없습니다.
dragon788

16

당신이 go get정말로 빠르게 일하고 싶어하고 당신의 일과 함께 움직이고 싶다면 ...

그냥 수출 GIT_TERMINAL_PROMPT=1

$ export GIT_TERMINAL_PROMPT=1
$ go get [whatever]

이제 나머지 셸 세션에 대한 사용자 / 패스를 묻는 메시지가 표시됩니다. 보다 영구적 인 솔루션을 위해 위와 같이 이것을 .profile설치 하십시오 git.


16

ssh대신 사용해야 https하지만 git이 여전히 https로 구성되어 있기 때문에 불평 합니다. 기본적으로 다른 사람들이 앞에서 언급했듯이 프롬프트를 활성화하거나 ssh대신 git을 사용하도록 구성해야합니다 https. 다음을 실행하여이를 수행하는 간단한 방법입니다.

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

또는 이미 컴퓨터에서 ssh함께 사용 하는 경우 맨 아래에서 다음 줄을 git안전하게 편집 ~/.gitconfig하고 추가 할 수 있습니다

참고 : 이것은 모든 SVC, 소스 버전 제어를 다루며, 정확하게 사용하는 것에 달려 있습니다 (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/
  • 암호 폼을 비활성화 상태로 유지하려면 암호를 캐시해야합니다. Mac, Windows 또는 Linux에서 github 비밀번호를 캐시하는 방법에 대한 자세한 내용은 이 페이지 를 방문 하십시오 .

  • github 계정에 ssh를 추가하는 방법에 대한 자세한 내용은 이 페이지 를 방문 하십시오 .

또한 더 중요한 것은 이것이 회사 또는 자신의 개인 저장소 인 경우 공개 또는 공개를 피하기 위해 이러한 저장소에 프록시 또는 체크섬 데이터베이스를 사용하지 않아야 할 수도 있습니다.

이렇게하려면 GOPRIVATEgo 명령이 개인용 (공용으로 사용할 수 없음)으로 간주 하여 프록시 또는 체크섬 데이터베이스를 사용 하지 않아야 하는 모듈을 제어하는 ​​환경 변수 를 설정 해야 합니다.

변수는 path.Match모듈 경로 접두사 의 쉼표로 구분 된 패턴 (Go의 동일한 구문) 목록입니다 . 예를 들어

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

또는

go env -w GOPRIVATE=github.com/mycompany/*

마지막으로 언급 할 것을 잊지 말고 go get인증 및 가져 오기로 구성 할 수 https있습니다. 다음 줄을 추가하면됩니다.$HOME/.netrc

machine github.com login USERNAME password APIKEY
  • GitHub 계정의 경우 비밀번호는 개인용 액세스 토큰 일 수 있습니다 .
  • 이 작업을 수행하는 방법에 대한 자세한 내용은 Go FAQ 페이지 를 확인 하십시오.

이것이 커뮤니티를 돕고 다른 사람들이 설명 된 문제를 신속하게 해결하는 시간을 절약하기를 바랍니다. 추가 지원이나 도움이 필요한 경우 언제든지 의견을 남겨주십시오.


GOPRIVATE( go env -w GOPRIVATE=github.com/mycompany/*)만이 나를 위해 일한 것입니다. 나는 그것을 자신의 제목 아래에 넣거나 심지어 더 강조하기 위해 자신의 대답 아래에 두는 것이 좋습니다.
Bernhard Barker

1

이 옵션으로 gitconfig를 구성하면 나중에 GitHub의 다른 저장소를 복제하는 데 문제가 있습니다

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

대신이 옵션을 사용하는 것이 좋습니다.

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

개인 저장소에서 액세스 토큰을 생성하는 것을 잊지 마십시오. 비밀번호를 입력하라는 메시지가 표시되면 액세스 토큰을 붙여 넣기 만하면됩니다. 행복한 클론 :)


0

"오류 : 프롬프트 스크립트를 실행하지 못했습니다 (종료 코드 1) 치명적 : 로그인 대화 상자를 통해 github에 로그인하려고하는 ' https://github.com ': No error의 사용자 이름을 읽을 수 없습니다 . 대화 상자를 취소하면 git이 명령 줄에 로그인과 암호를 요청했는데 정상적으로 작동했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.