ฉันจะมั่นใจได้อย่างไรว่า Git ไม่ขอชื่อผู้ใช้และรหัสผ่าน GitHub ของฉัน


171

ฉันทำงานกับ repo ใน GitHub และทุกครั้งที่ฉันพยายามผลักดันบางสิ่งมันจะขอชื่อผู้ใช้และรหัสผ่าน GitHub ของฉัน ฉันไม่ต้องการให้ทำเช่นนั้น

ฉันลองคำแนะนำในการตั้งค่าอีเมลของคุณใน Gitคือตั้งค่าตัวแปร Git github.user และ github.token แต่นั่นก็ไม่ได้สร้างความแตกต่างเลย

ฉันไม่เข้าใจว่าทำไมสิ่งนี้จึงเกิดขึ้น


คุณต้องแคชรหัสผ่าน: help.github.com/articles/set-up-git#password-caching
Piotr Usewicz

คำตอบ:


33

คุณต้องตั้งค่า ssh-agent ซึ่งคุณจะต้องรับรองความถูกต้องเพียงครั้งเดียว ดูคำตอบนี้ได้ที่ SO สำหรับวิธีการ


1
แต่วิธีนี้มีไว้สำหรับวลี ssh-family ปัญหาคือ git ใช้ "git push" ซึ่งไม่เรียกใช้ ssh-agent ฉันถือว่า (ฉันได้ทำสิ่งนี้มาแล้วดังนั้นฉันจึงรู้ว่ามันใช้งานไม่ได้)
picardo

2
@picardo: ฉันทำเช่นนี้และมันใช้งานได้จริง
Daenyth

213

มีปัญหาที่คล้ายกันในวันนี้: ฉันทำสิ่งที่สับสนในสำเนาการทำงานของฉันดังนั้นฉันตัดสินใจที่จะเปลี่ยนชื่อไดเรกทอรีและโคลนโครงการของฉันอีกครั้งจาก GitHub แต่หลังจากทำอย่างนั้นฉันต้องป้อนรหัสผ่านเพื่อทำคำขอดึง / ดันแทนที่จะป้อนข้อความรหัสผ่านเพียงครั้งเดียวตามที่เคยทำ

นั่นเป็นเพราะวันนี้ฉันใช้โปรโตคอล https เพื่อโคลนโครงการ! หากต้องการตรวจสอบว่าคุณใช้โปรโตคอลใดอยู่

git config -l

และดูบรรทัดที่ขึ้นต้นด้วย 'remote.origin.url'

วิธีสลับโปรโตคอล:

git config remote.origin.url git@github.com:the_repository_username/your_project.git

the_repository_usernameและyour_projectควรถูกแทนที่ด้วยชื่อที่เก็บที่เหมาะสมและเจ้าของที่เก็บนั้น ชื่อผู้ใช้จะเป็นของคุณหากคุณเป็นเจ้าของพื้นที่เก็บข้อมูลหรือชื่อผู้ใช้ของเจ้าของพื้นที่เก็บข้อมูลเป็นอย่างอื่น


5
มันใช้งานได้สำหรับฉัน สิ่งหนึ่งคือ URL ไม่ได้มีชื่อผู้ใช้ของฉัน แต่ที่อยู่ repo ตามที่ปรากฏใน GitHub:git@github.com:some-user/repo-name.git
B เซเว่น

1
หมายเหตุ: Google พาฉันมาที่นี่ ฉันremote.origin.urlตั้งค่าเป็นวิธี https และไม่ได้สังเกตว่ามีวิธีhttpsเทียบกับ sshURL นี้ช่วยให้ฉันเห็นชัดเจน: help.github.com/articles/…
Chris K

มีวิธีการป้อนรหัสผ่านด้วยหรือไม่
zishe

Q สำหรับผู้ที่มีความรู้ git: ความแตกต่างใด ๆ (หรือความชอบ) ระหว่างการgit config remote.origin.url ...ใช้ด้านบน, กับ git remote set-url origin ...?
Daryn

ฉันไม่สามารถหาวิธีลบต้นกำเนิดที่ผิดเช่นนั้นได้ คำตอบคือ:git remote rm origin
Vacilando

30

หากคุณใช้ HTTPS แทน SSH คุณสามารถทำตามนี้:

  1. ค้นหา URL ระยะไกลของคุณ (remote.origin.url) ด้วย

    git config -l
    

    ขอบคุณ Sergio Morstabilini

  2. URL ระยะไกลของคุณจะเป็นดังนี้: https: // {USERNAME} @ github.com / {USERNAME} / {REPONAME} .git

  3. ดำเนินการคำสั่งนี้:

    git config remote.origin.url https://{USERNAME}:{PASSWORD}@github.com/{USERNAME}/{REPONAME}.git
    

2
ชื่อผู้ใช้ของฉันมี@แต่ไม่ได้ผลสำหรับฉัน
coding_idiot

แต่ถ้ามันไม่ได้ (คุณไม่จำเป็นต้องใช้อีเมลของคุณ) มันทำงานได้อย่างสมบูรณ์แบบ! ขอบคุณ
Killah

4
หากชื่อผู้ใช้ของคุณมี @ คุณจะต้องเข้ารหัส URL meyerweb.com/eric/tools/dencoder
Tim Bodeit

1
คุณควรละเว้นรหัสผ่านของคุณเพื่อเหตุผลด้านความปลอดภัย
zygimantus

3
ระวังรหัสผ่านจะถูกเก็บไว้ในข้อความล้วนภายใน.git/configไฟล์!
Amro

26

ฉันชอบใช้ HTTPS ฉันคิดว่าง่ายกว่าและปลอดภัยกว่าการตั้งค่าปุ่ม ssh

เมื่อใช้ HTTPS คุณสามารถป้องกันไม่ให้คอมไพล์ขอชื่อผู้ใช้ของคุณสำหรับรีโมต GitHub ได้ดังนี้:

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

และอย่างน้อยคุณสามารถลดความถี่ git ถามรหัสผ่านของคุณด้วย:

git config --global credential.helper 'cache --timeout=28800'

ที่ 28800 คือ 8 ชั่วโมง ฉันใช้การตั้งค่านี้เพื่อป้อนรหัสผ่านของฉันเพียงครั้งเดียวเมื่อฉันเริ่มวันทำงาน

หลังจากนั้นคุณจะมีรายการเหล่านี้ภายในของคุณ ~/.gitconfig

[url "https://yourusername@github.com"]
    insteadOf = https://github.com

[credential]
    helper = cache --timeout=28800

ที่มา:

http://git-scm.com/docs/git-credential-cache

http://git-scm.com/docs/git-config


6

เมื่อคุณตั้งค่าคีย์ ssh สำหรับ github หากไม่ใช่คีย์เริ่มต้นของคุณคุณจะต้องเพิ่มส่วนลงใน ~/.ssh/config

Host *github.com
    User git
    IdentityFile ~/.ssh/github_id_rsa

6

หากคุณใช้ Windows โดยใช้ HTTPS ลองใช้Git Credential Storeซึ่งใช้ Windows Credential Store เพื่อเก็บชื่อและรหัสผ่านของคุณ

Windows Credential Store for Git
This application is a small helper app designed to follow the 
git credentials API as defined by the Git Documentation.

Installation
1. Download the git-credential-winstore.exe application
2. Run it! If you have GIT in your PATH, it should just work.

จากนั้นในครั้งต่อไปที่คุณป้อนชื่อและรหัสผ่านระบบจะจดจำชื่อเหล่านั้นให้คุณ


1
ขอขอบคุณ. โครงการนี้ได้รับการเปลี่ยนชื่อเป็นGit-Credential ผู้จัดการสำหรับวินโดวส์
Michael S.

5

นอกจากนี้หากคุณต้องการให้ใส่รหัสผ่านทุกครั้ง แต่ไม่ใช่ชื่อผู้ใช้ของคุณคุณต้องกำหนดค่ารีโมทเป็น HTTPS ด้วยชื่อผู้ใช้ .. เช่นนี้ ..

git config remote.origin.url https://USERNAME@github.com/repo_owner/repo_name

หลังจากนี้คุณจะได้รับพร้อมท์ให้ใส่รหัสผ่านทุกครั้ง แต่ไม่ใช่ชื่อผู้ใช้ของคุณ

นี่คือวิธีที่ฉันชอบเพราะฉันชอบถูกบังคับให้พิมพ์รหัสผ่าน GitHub ของฉันก่อนที่จะแบ่งปันกับคนทั่วโลก


2

สิ่งต่าง ๆ จะแตกต่างกันเล็กน้อยถ้าคุณใช้การตรวจสอบสิทธิ์แบบ 2 ปัจจัยเช่นเดียวกับฉัน เนื่องจากฉันไม่พบคำตอบที่ดีที่อื่นฉันจะติดที่นี่เพื่อที่ฉันจะหาได้ในภายหลัง

หากคุณใช้การตรวจสอบความถูกต้องด้วย 2 ปัจจัยดังนั้นการระบุชื่อผู้ใช้ / รหัสผ่านจะไม่สามารถใช้งานได้ - คุณถูกปฏิเสธการเข้าถึง แต่คุณสามารถใช้โทเค็นการเข้าถึงแอปพลิเคชันและใช้ตัวช่วยข้อมูลประจำตัวของ git เพื่อแคชสำหรับคุณ นี่คือลิงค์ที่เกี่ยวข้อง:

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


2

ใช้ SSH

เพื่อป้องกัน GitHub ขอรหัสผ่านในขณะที่กดคุณควรใช้ SSH ( git@github.com:...) แทน HTTPS URL ( https://github.com/...) และเพิ่มคีย์ SSH ของคุณไปยังบัญชี GitHub ของคุณ ดู: ฉันควรใช้ URL ระยะไกลใด

GitHub - โคลนด้วย SSH

ผู้ช่วยข้อมูลรับรอง

มิฉะนั้นถ้าคุณต้องการใช้ HTTPS จริงๆเพื่อแคชรหัสผ่าน GitHub ของคุณใน Gitคุณควรใช้ผู้ช่วยข้อมูลประจำตัวเพื่อบอก Git ให้จดจำชื่อผู้ใช้และรหัสผ่าน GitHub ทุกครั้งที่พูดถึง GitHub

  • Mac: git config --global credential.helper osxkeychain( osxkeychain helperจำเป็น)
  • ของ windows: git config --global credential.helper wincred
  • Linux และอื่น ๆ : git config --global credential.helper cache

.netrc

อีกวิธีหนึ่งคือใช้กำหนดค่าผู้ใช้ / รหัสผ่านใน~/.netrc( _netrcบน Windows) เช่น

machine github.com
login USERNAME
password PASSWORD

OAuth

ใช้โทเค็น OAuth ( โทเค็นAPI ส่วนบุคคล ) เพื่อผลักดันการเปลี่ยนแปลงเช่น

git push https://4UTHT0KEN@github.com/foo/bar

ที่เกี่ยวข้อง:


1

นอกจากนี้หากคุณใช้ Windows คุณสามารถใช้:

$ git config --global credential.helper wincred

คุณเพียงแค่ต้องลงชื่อเข้าใช้อีกครั้งจากนั้นคอมไพล์จะจดจำ


1

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

ดังนั้นฉันแค่เพิ่มลงใน ".gitconfig" ของฉัน

[url "https://myusername@github.com"]
    insteadOf = https://github.com

0

ใช้Git Credential Manager สำหรับ Windowsหากคุณใช้ Windows

โครงการนี้รวมถึง :

  • จัดเก็บรหัสผ่านที่ปลอดภัยใน Windows Credential Store
  • สนับสนุนการรับรองความถูกต้องด้วยหลายปัจจัยสำหรับ Visual Studio Team Services
  • รองรับการตรวจสอบสิทธิ์แบบสองปัจจัยสำหรับ GitHub
  • โทเค็นการเข้าถึงและการใช้โทเค็นการเข้าถึงส่วนบุคคลสำหรับ Visual Studio Team Services และ GitHub
  • สนับสนุนโหมดที่ไม่โต้ตอบสำหรับ Visual Studio Team Services ที่สนับสนุนโดย Azure Directory
  • การพิสูจน์ตัวตน Kerberos สำหรับ Team Foundation Server
  • การตั้งค่าเพิ่มเติมสำหรับการสร้างตัวแทนการปรับให้เหมาะสม

เพียงดาวน์โหลดเวอร์ชันล่าสุดและติดตั้ง

วิธีใช้

คุณทำไม่ได้ มันทำงานได้อย่างน่าอัศจรรย์เมื่อจำเป็นต้องใช้ข้อมูลรับรอง

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