đi lấy kết quả trong lỗi 'thiết bị đầu cuối bị vô hiệu hóa' cho github repo private


187

Tôi đã tạo các ví dụ repo riêng / myprivaterepo bằng giao diện người dùng Github từ trình duyệt của tôi.

Sau đó, tôi đã đi đến thư mục đi của tôi (trên máy tính để bàn) và nhân bản nó:

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

Càng xa càng tốt. Tạo tệp calendaruler.go, thêm vào repo và đẩy.

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

Mọi thứ đều ổn. Nhưng khi tôi đi đến một máy tính xách tay sạch và cố gắng sao chép repo, tôi đã gặp một lỗi:

# 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

Tại sao máy tính xách tay của tôi ghét repo của riêng tôi và làm thế nào tôi có thể chấp nhận số phận của nó? Cảm ơn.


10
Đây không phải là một golỗi, gitđang trả về "lời nhắc thiết bị đầu cuối bị vô hiệu hóa". Bạn có thể chạy git clone https://github.com/examplesite/myprivaterepotrên máy tính xách tay của bạn?
JimB

1
Cảm ơn bạn. Bản sao git làm việc. Sau đó, đi làm việc. Thỏa thuận là gì? Tôi có phải "mồi máy bơm" như thế này mỗi lần hay tôi đã hiểu sai một cái gì đó?
tomcam

1
@tomcam, bạn có thể thêm khóa ssh vào tài khoản github và go get sẽ hoạt động ngay từ đầu, xem help.github.com/articles/generating-ssh-keys
alex vasi

@alexvasi: điều đó chỉ hoạt động nếu anh ấy nhân bản repo qua ssh trước, vì nó sẽ yêu cầu https://github.com/nếu đường dẫn nhập không tồn tại. Quá trình git sẽ có thể nhắc tên người dùng / mật khẩu, do đó phải có một cái gì đó khác nhau trong cấu hình máy tính xách tay - vỏ khác nhau, .gitconfig khác nhau, một biến env, v.v.
JimB

Tất cả điều này đã giúp tôi, nhưng tôi không chắc làm thế nào để đánh dấu là đã trả lời và / hoặc giải quyết. Đây là những gì tôi có cho đến nay.
tomcam 27/8/2015

Câu trả lời:


172

đi lấy vô hiệu hóa "dấu nhắc thiết bị đầu cuối" theo mặc định. Điều này có thể được thay đổi bằng cách đặt biến môi trường của git:

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

304

Tôi thấy điều này cực kỳ hữu ích, và nó đã giải quyết vấn đề của tôi. Lệnh này sẽ cho phép 2FA của bạn thực hiện công việc của mình (và tiết kiệm cho bạn những rắc rối khi nhập tên người dùng và mật khẩu của bạn):

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

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

Nếu bạn không sử dụng 2FA, bạn vẫn có thể sử dụng SSH và điều này sẽ hoạt động.

Chỉnh sửa: thêm --addcờ theo đề xuất của slatunje .


12
Tôi khuyên bạn nên thêm cờ --add để bạn không ghi đè cài đặt hiện có mà bạn có thể có Ví dụ:git config --global --add url."git@github.com:".insteadOf "https://github.com/"
slatunje

Cảm ơn slatunje, đã thêm cờ vào câu trả lời của tôi dựa trên phản hồi của bạn.
Wylliam Judd

5
Đây là giải pháp tốt nhất IMO. An toàn hơn và ít nỗ lực hơn (một lần thiết lập) để sử dụng các khóa SSH để xác thực thay vì tên người dùng / mật khẩu
bodecker

1
Đừng làm điều này trên Windows. Tôi đã kết thúc với lỗi git@github.com: Permission denied (publickey). fatal: Could not read from remote repository..
Shital Shah

1
làm việc cho linux quá. nên hoạt động cho tất cả mọi người nếu bạn đang sử dụng ssh
continaly

38

1 - go getsẽ từ chối xác thực trên dòng lệnh. Vì vậy, bạn cần phải lưu các thông tin đăng nhập trong git. Vì tôi sử dụng osx nên tôi có thể sử dụng trình trợ giúp thông tin osxkeychain.

Thứ 2 Đối với tôi, tôi đã kích hoạt 2FA và do đó không thể sử dụng mật khẩu của mình để xác thực. Thay vào đó, tôi phải tạo mã thông báo truy cập cá nhân để sử dụng thay cho mật khẩu.

  1. thiết lập trình trợ giúp thông tin osxkeychain https://help.github.com/articles/caching-your-github-password-in-git/
  2. Nếu sử dụng TFA thay vì sử dụng mật khẩu của bạn, hãy tạo mã thông báo truy cập cá nhân với phạm vi repo https://github.com/sinstall/tokens
  3. git sao chép một repo riêng chỉ để làm cho nó lưu mật khẩu git clone https://github.com/user/private_repo và sử dụng tên người dùng github.com của bạn cho tên người dùng và mã thông báo truy cập cá nhân được tạo cho mật khẩu.
  4. Đã xóa repo vừa được nhân bản và kiểm tra lại để đảm bảo tín dụng được lưu trong bộ nhớ cache - git clone https://github.com/user/private_repovà lần này không được yêu cầu tín dụng.

    1. go get sẽ hoạt động với bất kỳ repos nào mà mã thông báo truy cập cá nhân có thể truy cập. Bạn có thể phải lặp lại các bước với các tài khoản / mã thông báo khác vì quyền khác nhau.

1
Tôi có 2FA và điều này hoạt động với tôi - đã tạo ra một mã thông báo (có đầy đủ quyền riêng tư), đã thực hiện một git clonetrong những repos hiện có của riêng tôi (nó thực sự là công khai), đã được nhắc nhở username, đặt tên người dùng GitHub của tôi, sau đó đặt vào tạo mã thông báo cho password- đã xóa repo nhân bản, sau đó chạy lại go getlệnh và tất cả đều ổn - cảm ơn! (OSX cũng ở đây)
Eric Dorsey

3
Điều này cũng thực sự tuyệt vời vì bạn có thể giới hạn phạm vi của mã thông báo chỉ "đọc" cho các repos riêng vì vậy ngay cả khi nó bằng cách nào đó vào hình ảnh trong tự nhiên, họ chỉ có thể đọc mã của bạn và không đẩy mọi thứ vào đó và bạn có thể thu hồi mã thông báo thực sự dễ dàng. Tôi không thể nhớ lại nếu họ đã hết hạn tự động.
dragon788

16

Nếu bạn chỉ muốn go getlàm việc thật nhanh và di chuyển cùng với công việc của bạn ...

Chỉ cần xuất GIT_TERMINAL_PROMPT=1

$ export GIT_TERMINAL_PROMPT=1
$ go get [whatever]

Bây giờ nó sẽ nhắc bạn cho một người dùng / vượt qua trong phần còn lại của phiên shell của bạn. Đặt cái này trong .profilehoặc thiết lập gitnhư trên để có giải pháp lâu dài hơn.


14

Nó phàn nàn vì cần sử dụng sshthay vì httpsnhưng git của bạn vẫn được cấu hình bằng https. về cơ bản như những người khác đã đề cập trước đây, bạn cần kích hoạt lời nhắc hoặc định cấu hình git để sử dụng sshthay vì https. một cách đơn giản để làm điều này bằng cách chạy như sau:

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

hoặc nếu bạn đã sử dụng sshvới gittrong máy của mình, bạn có thể chỉnh sửa ~/.gitconfigvà thêm dòng sau một cách an toàn ở dưới cùng

Lưu ý: Điều này bao gồm tất cả SVC, kiểm soát phiên bản nguồn, phụ thuộc vào chính xác những gì bạn sử dụng, 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/
  • Nếu bạn muốn giữ cho mật khẩu bị tắt, bạn cần phải lưu mật khẩu. Để biết thêm thông tin về cách lưu trữ mật khẩu github của bạn trên mac, windows hoặc linux, vui lòng truy cập trang này .

  • Để biết thêm thông tin về cách thêm ssh vào tài khoản github của bạn, vui lòng truy cập trang này .

Ngoài ra, quan trọng hơn, nếu đây là kho lưu trữ riêng cho một công ty hoặc cho chính bạn, bạn có thể cần phải bỏ qua việc sử dụng proxy hoặc cơ sở dữ liệu tổng kiểm tra cho các kho đó để tránh lộ chúng công khai.

Để làm điều này, bạn cần đặt GOPRIVATEbiến môi trường kiểm soát các mô-đun mà lệnh go coi là riêng tư (không có sẵn công khai) và do đó KHÔNG nên sử dụng cơ sở dữ liệu proxy hoặc tổng kiểm tra.

Biến là một danh sách các mẫu được phân tách bằng dấu phẩy (cùng cú pháp của Go path.Match) của các tiền tố đường dẫn mô-đun. Ví dụ,

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

Hoặc là

go env -w GOPRIVATE=github.com/mycompany/*
  • Để biết thêm thông tin về cách giải quyết các vấn đề kiểm tra gói / mô-đun riêng, vui lòng đọc bài viết này .
  • Để biết thêm thông tin về go 13 mô-đun và các cải tiến mới, vui lòng xem Go 1.13 Mô-đun Ghi chú phát hành .

Một điều cuối cùng không thể quên, bạn vẫn có thể định cấu hình go getđể xác thực và tìm nạp https, tất cả những gì bạn cần làm là thêm dòng sau vào$HOME/.netrc

machine github.com login USERNAME password APIKEY

Tôi hy vọng điều này sẽ giúp cộng đồng và tiết kiệm thời gian của người khác để giải quyết các vấn đề được mô tả nhanh chóng. xin vui lòng để lại nhận xét trong trường hợp bạn muốn được hỗ trợ hoặc giúp đỡ nhiều hơn.


GOPRIVATE( go env -w GOPRIVATE=github.com/mycompany/*) là điều duy nhất làm việc cho tôi. Tôi có thể đề nghị đặt nó dưới tiêu đề của chính nó hoặc thậm chí trong một câu trả lời của riêng nó để làm nổi bật nó hơn một chút.
Bernhard Barker

1

Nếu bạn định cấu hình gitconfig của mình với tùy chọn này, sau này bạn sẽ gặp sự cố khi sao chép các repos khác của GitHub

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

Thay vào đó, tôi khuyên bạn nên sử dụng tùy chọn này

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

và đừng quên tạo mã thông báo truy cập từ kho lưu trữ riêng của bạn. Khi được nhắc nhập mật khẩu của bạn, chỉ cần dán mã thông báo truy cập. Chúc mừng nhân bản :)


0

Tôi gặp vấn đề tương tự trên windows "lỗi: không thực thi được đoạn mã nhắc (mã thoát 1) gây tử vong: không thể đọc Tên người dùng cho ' https://github.com ': Không có lỗi" khi cố gắng đăng nhập vào github thông qua hộp thoại đăng nhập. Khi tôi hủy hộp thoại, git yêu cầu tôi đăng nhập và mật khẩu trong dòng lệnh và nó hoạt động tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.