ไปรับผลลัพธ์ในข้อผิดพลาด 'แจ้งให้ปิดการใช้งาน terminal' สำหรับ repo ส่วนตัว Github


187

ฉันสร้างตัวอย่าง repo ส่วนตัว / myprivaterepo ส่วนตัวโดยใช้ Github UI จากเบราว์เซอร์ของฉัน

จากนั้นฉันไปที่ไดเรกทอรี go (บนเดสก์ท็อป) และโคลน:

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

จนถึงตอนนี้ดีมาก สร้างไฟล์ scheduler.go เพิ่มไปที่ repo และผลักดัน

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

ตกลงทุกคน แต่เมื่อฉันไปที่แล็ปท็อปที่สะอาดและพยายามโคลน repo ฉันได้รับข้อผิดพลาด:

# 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

เหตุใดแล็ปท็อปของฉันจึงเกลียดกับ repo ของตัวเองและฉันจะทำให้มันยอมรับชะตากรรมของมันได้อย่างไร ขอบคุณ


10
นี่ไม่ใช่goข้อผิดพลาดgitกำลังส่งคืน "ปิดใช้งานการแจ้งเตือนเทอร์มินัล" คุณสามารถใช้งานgit clone https://github.com/examplesite/myprivaterepoบนแล็ปท็อปของคุณได้หรือไม่?
JimB

1
ขอบคุณ. โคลนคอมไพล์ทำงาน จากนั้นไปทำงาน ตกลงคืออะไร? ฉันต้อง "ปั๊มหลัก" แบบนี้ทุกครั้งหรือฉันกำหนดค่าบางอย่างผิดพลาดหรือไม่?
tomcam

1
@tomcam คุณสามารถเพิ่มคีย์ ssh ไปยังบัญชี github และ go get จะทำงานตั้งแต่เริ่มต้นดูhelp.github.com/articles/generating-ssh-keys
alex vasi

@alexvasi: ใช้งานได้เฉพาะถ้าเขาโคลน repo เองบน ssh ก่อนเนื่องจากมันจะร้องขอจากhttps://github.com/หากเส้นทางการนำเข้าไม่มีอยู่ ขั้นตอนการคอมไพล์ควรจะสามารถที่จะพร้อมในการ username / password ดังนั้นต้องมีบางอย่างที่แตกต่างกันในการกำหนดค่าแล็ปท็อป - เปลือกแตกต่างกัน .gitconfig ที่แตกต่างกันตัวแปร env ฯลฯ
JimB

ทั้งหมดนี้ช่วยฉันได้ แต่ฉันไม่แน่ใจว่าจะทำเครื่องหมายว่าตอบแล้วและ / หรือแก้ไขได้อย่างไร นี่คือสิ่งที่ฉันมี
tomcam

คำตอบ:


173

ไปรับปิดการใช้งาน "terminal prompt" โดยค่าเริ่มต้น สิ่งนี้สามารถเปลี่ยนแปลงได้โดยการตั้งค่าตัวแปรสภาพแวดล้อมของ 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 ได้และจะใช้งานได้

แก้ไข: เพิ่ม--addธงตามที่แนะนำโดยslatunje


12
ผมขอแนะนำให้เพิ่ม--addธงเพื่อที่คุณจะไม่เขียนทับการตั้งค่าที่มีอยู่คุณอาจจะมีตัวอย่างเช่น:git config --global --add url."git@github.com:".insteadOf "https://github.com/"
slatunje

ขอขอบคุณ slatunje เพิ่มการตั้งค่าสถานะลงในคำตอบของฉันตามความคิดเห็นของคุณ
Wylliam Judd

5
นี่คือทางออกที่ดีที่สุด IMO มันปลอดภัยและใช้ความพยายามน้อยกว่า (เมื่อตั้งค่า) เพื่อใช้คีย์ SSH สำหรับรับรองความถูกต้องแทนชื่อผู้ใช้ / รหัสผ่าน
bodecker

1
อย่าทำสิ่งนี้บน Windows git@github.com: Permission denied (publickey). fatal: Could not read from remote repository.วันนี้ฉันมีข้อผิดพลาด
Shital Shah

1
ใช้งานได้กับ linux ด้วย ควรจะทำงานสำหรับทุกคนถ้าคุณกำลังใช้ SSH globaly
Chiptus

39

วันที่ 1 - go getจะปฏิเสธที่จะรับรองความถูกต้องในบรรทัดคำสั่ง ดังนั้นคุณต้องแคชข้อมูลประจำตัวในคอมไพล์ เพราะฉันใช้ osx ฉันสามารถใช้ผู้ช่วยหนังสือรับรอง osxkeychain

2nd สำหรับฉันฉันเปิดใช้งาน 2FA แล้วดังนั้นไม่สามารถใช้รหัสผ่านของฉันในการตรวจสอบสิทธิ์ได้ แต่ฉันต้องสร้างโทเค็นการเข้าถึงส่วนบุคคลเพื่อใช้แทนรหัสผ่าน

  1. ติดตั้งผู้ช่วยหนังสือรับรองการตั้งค่า osxkeychain https://help.github.com/articles/caching-your-github-password-in-git/
  2. หากใช้ TFA แทนการใช้รหัสผ่านของคุณสร้างโทเค็นการเข้าถึงส่วนบุคคลด้วยขอบเขต repo https://github.com/settings/tokens
  3. git clone repo ส่วนตัวเพียงเพื่อให้แคชรหัสผ่าน git clone https://github.com/user/private_repo และใช้ชื่อผู้ใช้ github.com ของคุณสำหรับชื่อผู้ใช้และโทเค็นการเข้าถึงส่วนบุคคลที่สร้างขึ้นสำหรับรหัสผ่าน
  4. ลบ repo ที่เพิ่งโคลนและทดสอบซ้ำเพื่อให้แน่ใจว่าเครดิตถูกแคช - git clone https://github.com/user/private_repoและคราวนี้ไม่ได้ขอเครดิต

    1. go get จะทำงานกับ repos ใด ๆ ที่โทเค็นการเข้าถึงส่วนบุคคลสามารถเข้าถึงได้ คุณอาจต้องทำซ้ำขั้นตอนกับบัญชี / โทเค็นอื่น ๆ เนื่องจากการอนุญาตแตกต่างกันไป

1
ฉันมี 2FA และสิ่งนี้ใช้งานได้สำหรับฉัน - สร้างโทเค็น (พร้อมเต็มส่วนตัว) ทำgit cloneหนึ่งใน repos ที่มีอยู่ของฉันเอง (เป็นสาธารณะจริง ๆ ) ได้รับแจ้งจากฉันusernameใส่ชื่อผู้ใช้ GitHub ของฉันจากนั้นใส่ สร้างโทเค็นสำหรับpassword- ลบ repo ที่ลอกแล้วจากนั้นทำการรันgo getคำสั่งและทั้งหมดก็ดีขอบคุณ! (OSX ที่นี่เช่นกัน)
Eric Dorsey

3
นี่เป็นสิ่งที่ยอดเยี่ยมเช่นกันเพราะคุณสามารถ จำกัด ขอบเขตของโทเค็นให้เป็น "อ่าน" เฉพาะสำหรับ repos ส่วนตัวดังนั้นแม้ว่ามันจะเข้าไปในรูปภาพในป่าพวกเขาสามารถอ่านรหัสของคุณและไม่ผลักสิ่งต่าง ๆ เข้ามาและคุณสามารถ ยกเลิกโทเค็นได้อย่างง่ายดายจริงๆ ฉันจำไม่ได้ว่าพวกเขามีวันหมดอายุอัตโนมัติในตัว
dragon788

16

หากคุณเพียงต้องการgo getทำงานอย่างรวดเร็วจริงและย้ายไปพร้อมกับงานของคุณ ...

เพียงส่งออก GIT_TERMINAL_PROMPT=1

$ export GIT_TERMINAL_PROMPT=1
$ go get [whatever]

ตอนนี้มันจะพร้อมท์ให้คุณใส่ผู้ใช้ / พาสสำหรับช่วงเวลาที่เหลือของเซสชันเชลล์ของคุณ ใส่สิ่งนี้ใน.profileหรือตั้งค่าของคุณgitตามด้านบนเพื่อหาทางออกที่ถาวรกว่า


16

มันบ่นเพราะมันจำเป็นต้องใช้sshแทนhttpsแต่คอมไพล์ของคุณยังคงได้รับการกำหนดค่าด้วย https ดังนั้นโดยทั่วไปเป็นคนอื่นกล่าวก่อนหน้านี้คุณต้องเปิดการใช้งานแจ้งหรือการกำหนดค่าคอมไพล์ที่จะใช้แทนssh 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/
  • หากคุณต้องการปิดการใช้งาน pompts รหัสผ่านคุณต้องแคชรหัสผ่าน สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีแคชรหัสผ่าน Github ของคุณใน mac, windows หรือ linux โปรดไปที่หน้านี้

  • สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีเพิ่ม ssh ไปยังบัญชี GitHub ของคุณโปรดไปที่หน้านี้

นอกจากนี้ที่สำคัญถ้าเป็นที่เก็บส่วนตัวสำหรับ บริษัท หรือเพื่อตัวคุณเองคุณอาจต้องข้ามการใช้พร็อกซีหรือฐานข้อมูลการตรวจสอบสำหรับ repos ดังกล่าวเพื่อหลีกเลี่ยงการเปิดเผยต่อสาธารณะ

ในการทำเช่นนี้คุณต้องตั้งค่าGOPRIVATEตัวแปรสภาพแวดล้อมที่ควบคุมว่าโมดูลใดที่คำสั่ง go พิจารณาว่าเป็นแบบส่วนตัว (ไม่พร้อมใช้งานแบบสาธารณะ) และดังนั้นจึงไม่ควรใช้ฐานข้อมูลพร็อกซีหรือเช็คซัม

ตัวแปรคือรายการของรูปแบบที่คั่นด้วยเครื่องหมายจุลภาค (ไวยากรณ์เดียวกันกับของ Go path.Match) ของคำนำหน้าเส้นทางโมดูล ตัวอย่างเช่น,

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

หรือ

go env -w GOPRIVATE=github.com/mycompany/*
  • สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการแก้ไขปัญหาการตรวจสอบความถูกต้องของแพคเกจ / โมดูลส่วนตัวโปรดอ่านบทความนี้บทความนี้
  • สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเดินทาง 13 โมดูลและปรับปรุงใหม่โปรดตรวจสอบบันทึกไป 1.13 โมดูลที่วางจำหน่าย

สุดท้ายสิ่งหนึ่งที่ไม่ลืมที่จะพูดถึงคุณยังคงสามารถกำหนดค่าgo getเพื่อรับรองความถูกต้องและดึงข้อมูลhttpsทั้งหมดที่คุณต้องทำคือการเพิ่มบรรทัดต่อไปนี้เพื่อ$HOME/.netrc

machine github.com login USERNAME password APIKEY
  • สำหรับบัญชี GitHub รหัสผ่านอาจจะเป็นราชสกุลเข้าถึงส่วนบุคคล
  • สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำสิ่งนี้โปรดไปที่หน้าคำถามที่พบบ่อย

ฉันหวังว่านี่จะช่วยชุมชนและประหยัดเวลาของผู้อื่นในการแก้ปัญหาที่อธิบายไว้อย่างรวดเร็ว โปรดแสดงความคิดเห็นในกรณีที่คุณต้องการการสนับสนุนหรือความช่วยเหลือเพิ่มเติม


GOPRIVATE( go env -w GOPRIVATE=github.com/mycompany/*) เป็นสิ่งเดียวที่เหมาะกับฉัน ฉันอาจแนะนำให้วางไว้ภายใต้หัวข้อของตัวเองหรือแม้กระทั่งในคำตอบของตัวเองเพื่อเน้นมันอีกเล็กน้อย
Bernhard Barker

1

หากคุณกำหนดค่า gitconfig ด้วยตัวเลือกนี้คุณจะมีปัญหาในการโคลน repos อื่น ๆ ของ GitHub

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

ฉันขอแนะนำให้คุณใช้ตัวเลือกนี้แทน

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

และอย่าลืมสร้างโทเค็นการเข้าถึงจากที่เก็บส่วนตัวของคุณ เมื่อได้รับแจ้งให้ป้อนรหัสผ่านของคุณเพียงวางโทเค็นการเข้าถึง แฮปปี้โคลนนิ่ง :)


0

ฉันมีปัญหาเดียวกันบน windows "ข้อผิดพลาด: ล้มเหลวในการเรียกใช้สคริปต์พรอมต์ (รหัสทางออก 1) ร้ายแรง: ไม่สามารถอ่านชื่อผู้ใช้สำหรับ ' https://github.com ': ไม่มีข้อผิดพลาด" พยายามลงชื่อเข้าใช้ Github ผ่านช่องโต้ตอบการเข้าสู่ระบบ เมื่อฉันยกเลิกการโต้ตอบ git ถามฉันสำหรับการเข้าสู่ระบบและรหัสผ่านในบรรทัดคำสั่งและมันทำงานได้ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.