Git ให้ฉันใส่รหัสผ่านต่อไป


665

ฉันใช้ Git มาระยะหนึ่งแล้ว แต่การขอรหัสผ่านอย่างต่อเนื่องกำลังเริ่มทำให้ฉันติดอยู่กับที่

ผมใช้ Mac OS X และ GitHub และฉันจะตั้งค่า Git และกุญแจ SSH ของฉันตามคำสั่งของ GitHub ของหน้าการตั้งค่า Git

ฉันยังได้เพิ่มคีย์ SSH GitHub ของฉัน Mac OS X พวงกุญแจเป็นที่กล่าวถึงในSSH คีย์วลีรหัสผ่านหน้า กุญแจสาธารณะของฉันลงทะเบียนกับ Git

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


1
คำถามโง่ แต่คุณได้ตรวจสอบแล้วว่าคีย์ SSH ใช้งานได้เมื่อใช้ ssh กับเครื่องด้วย git หรือไม่?
Kurt Stutsman

4
คุณหมายถึงสิ่งที่ชอบ ssh -T git@github.com? ใช่มันใช้งานได้ดี (ถ้าช้าหน่อย)
Catherine

2
ดูเพิ่มเติมGit ผลักดันต้องใช้ชื่อผู้ใช้และรหัสผ่าน

สำหรับ https url คุณสามารถใช้ (พร้อม git1.8.3 +) ผู้ช่วยหนังสือรับรอง git ' netrc' ดูตัวอย่างเต็มได้ที่นี่
VonC

ฉันเป็นผู้ใช้ Windows และฉันก็ประสบปัญหาการร้องขอรหัสผ่านแม้หลังจากเพิ่มรหัสสาธารณะของฉันไปยังไฟล์ authorized_keys ของเซิร์ฟเวอร์ ปัญหาจริงๆคือฉันไม่ได้เก็บกุญแจสาธารณะ / ส่วนตัวไว้ในโฟลเดอร์. ssh ของโฟลเดอร์ c: \ program files \ git หากใครประสบปัญหาดังกล่าวโปรดคัดลอกคีย์ของคุณในโฟลเดอร์นี้และลองกด / ดึง
Raja Amer Khan

คำตอบ:


797

ฉันคิดว่าคุณอาจมีที่เก็บข้อมูล Git ผิด

เปิด.git/configและค้นหาส่วน [รีโมท "กำเนิด"] ตรวจสอบให้แน่ใจว่าคุณกำลังใช้ SSH อยู่:

ssh://git@github.com/username/repo.git

คุณสามารถดู URL SSH ในหน้าหลักของพื้นที่เก็บข้อมูลของคุณถ้าคุณคลิกโคลนหรือดาวน์โหลดและเลือกSSH

ไม่ใช่httpsหรือgit:

https://github.com/username/repo.git
git://github.com/username/repo.git

ตอนนี้คุณสามารถตรวจสอบที่มีเพียงคีย์ SSH แทนชื่อผู้ใช้และรหัสผ่าน

ถ้า Git บ่นว่า'origin' has already been addedเปิด.configไฟล์และแก้ไขurl = "..."ส่วนหนึ่งหลังจากที่[remote origin]เป็นurl = ssh://github/username/repo.git


เช่นเดียวกันสำหรับบริการอื่น ๆ ตรวจสอบว่าที่อยู่มีลักษณะดังนี้:protocol://something@url

เช่น.git/configสำหรับAzure DevOps:

[remote "origin"]
    url = https://mystore@dev.azure.com/mystore/myproject/
    fetch = +refs/heads/*:refs/remotes/origin/*

4
นี่อาจเป็นได้ เมื่อฉันเรียก git remote -v ฉันจะได้รับ: origin github.com/Foo/Bar.git (fetch) origin github.com/Foo/Bar.git (push) ในขณะที่ทำงานกับ SSH ดูเหมือนว่าควรเป็น: origin git @ github.com: Foo / Bar.git (ดึงข้อมูล) ต้นกำเนิด git@github.com: Foo / Bar.git (พุช) อาจเป็นเพราะฉันเริ่มดูโครงการของฉันโดยใช้แอปพลิเคชัน Mac ของ GitHub ( mac.github.com ) ความคิดใดที่ฉันสามารถแก้ไขได้?
Catherine

8
แก้ไข URL ในไฟล์. git / config ใช้ git-remote เพื่อแก้ไขหรือลบ repo ในเครื่องของคุณและโคลนอีกครั้งด้วย URL ที่ถูกต้อง
static_rtti

91
เพียงแค่จะสะกดออกนี้ (ที่ผมจำเป็นต้องใช้มัน): เปิด .git / config และในชุดส่วน[remote "origin"] url = ssh://git@github.com/username/Repo.gitที่ทำงานให้ฉัน
เกร็ก K

13
แปลกแก้ปัญหาของ @ GregK ไม่ได้ผลสำหรับฉัน แต่url = git@github.com:organization/Repo.gitได้ผล +1 สำหรับนำฉันลงเส้นทางที่ถูกต้องแม้ว่า! ที่ประสบความสำเร็จ!
jmort253

3
ฉันไม่เครียดพอที่จะให้ความสำคัญกับ CLONE โดยใช้ ssh: // git @ github / [ชื่อผู้ใช้] / [reponame] .git คุณต้องการใช้กุญแจเพื่อเข้าถึง GIT โดยไม่ต้องพิมพ์ชื่อผู้ใช้และรหัสผ่านของคุณทุกครั้ง . ฉันพบวิธีเดียวที่จะแก้ไขได้คือลบ repo ในพื้นที่และโคลนอีกครั้ง $ git clone ssh: // git @ github / [ชื่อผู้ใช้] / [reponame] .git
Gene Myers

555

การกำหนดค่า credential.helper

บน OS X (ตอนนี้ macOS) ให้เรียกใช้ในTerminal :

git config --global credential.helper osxkeychain

ช่วยให้ Git ใช้ไฟล์ Keychain.app เพื่อจัดเก็บชื่อผู้ใช้และรหัสผ่านและดึงข้อความรหัสผ่านไปยังคีย์ SSH ส่วนตัวของคุณจากพวงกุญแจ

สำหรับการใช้งาน Windows:

git config --global credential.helper wincred

การแก้ไขปัญหา

หากผู้ช่วยหนังสือรับรอง Git ได้รับการกำหนดค่าอย่างถูกต้อง macOS จะบันทึกข้อความรหัสผ่านในพวงกุญแจ บางครั้งการเชื่อมต่อระหว่าง SSH และข้อความรหัสผ่านที่เก็บไว้ในพวงกุญแจอาจทำให้แตกได้ เรียกใช้ssh-add -Kหรือssh-add ~/.ssh/id_rsaเพื่อเพิ่มกุญแจลงในพวงกุญแจอีกครั้ง

macOS v10.12 (Sierra) เปลี่ยนเป็น ssh

สำหรับ macOS v10.12 (เซียร์) ssh-add -Kจะต้องเรียกใช้หลังจากรีบูตทุกครั้ง เพื่อหลีกเลี่ยงปัญหานี้สร้าง~/.ssh/configด้วยเนื้อหานี้

Host *
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/id_rsa

จากssh_config manหน้า 10.12.2:

UseKeychain

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

Apple ได้เพิ่มTechnote 2449ซึ่งอธิบายสิ่งที่เกิดขึ้น

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


30
นี่เป็นวิธีที่ดีที่สุดในการทำเช่นนี้เนื่องจากแอปพลิเคชัน Github สำหรับ OSX (อาจใช้ Windows เช่นกัน) ใช้เส้นทาง https สำหรับ git repos โดยค่าเริ่มต้น นอกจากนี้ยังมีเหตุผลที่ดีสำหรับการใช้ https แทนที่จะใช้ ssh / git เนื่องจากเครือข่ายขององค์กรจำนวนมากอนุญาตการรับส่งข้อมูลบนพอร์ต80และ443เพื่อเหตุผลด้านความปลอดภัย
codehugger

2
คุณต้องใช้คอมไพล์ 1.7.10 หรือใหม่กว่าเพื่อใช้ตัวช่วยข้อมูลประจำตัว
jbandi

3
+1 สำหรับการแก้ปัญหา keychain.app นี้เป็นที่ดีสำหรับฉันเพราะเซิร์ฟเวอร์คอมไพล์ของนายจ้างสนับสนุนเฉพาะ http แสดงผ่าน Apache และพวกเขาไม่สนับสนุนให้ใช้.netrcวิธีการของไฟล์ซึ่งทำให้รหัสผ่านของคุณในข้อความธรรมดา
Josh

3
หมายเหตุฉันได้รับข้อผิดพลาด'credential-osxkeychain' is not a git command.เนื่องจากฉันไม่ได้ติดตั้งตัวช่วยข้อมูลรับรอง ผมทำตามคำแนะนำที่นี่การติดตั้ง: help.github.com/articles/set-up-git#password-caching
ฮิวจ์

2
ขอบคุณสำหรับการอัปเดตของ Sierra ฉันเพิ่งอัปเดตและไม่สามารถเข้าใจได้ว่าทำไม github จึงถาม pw เมื่อฉันเพิ่มgit config --global credential.helper osxkeychainไฟล์ config ใน.sshไดเรกทอรีของฉัน
พิกเซล 67

139

สิ่งนี้เกิดขึ้นกับฉันเมื่อฉันอัพเกรดเป็น macOS v10.12 (เซียร่า) ดูเหมือนว่าตัวแทน SSH จะถูกล้างเมื่ออัพเกรด

$ ssh-add -L
The agent has no identities.

เพียงทำงานssh-addอยู่ที่ตัวตนที่มีอยู่ของฉัน ฉันป้อนรหัสผ่านและดีที่จะไปอีกครั้ง


9
+1 หักโดยการอัปเกรด Sierra หมายเหตุรหัสผ่านเป็นรหัสผ่านสำหรับคีย์ SSH ของคุณไม่ใช่รหัสผ่านผู้ใช้ Mac ของคุณ
mbonness

1
การทำ ssh-add ใช้งานได้ แต่ดูเหมือนจะถูกรีเซ็ตโดยการปิดหน้าต่างเทอร์มินัล บางทีนี่อาจเป็น "คุณสมบัติ" ใหม่
joshd

หัวขึ้น - นี่เกิดขึ้นอีกครั้งพร้อมกับอัพเดทเซียร์ราอื่น (10.12.2)
ไบรอัน

ไม่มีใครรู้วิธีการนี้ไม่ถูกรีเซ็ตหลังจากปิดเทอร์มินัล
nickjwallin

1
ฉันเพิ่งอัปเดต macbook pro เป็น 10.12.2 และมันทำให้ฉันแย่ลง ใช้ ssh-add ทั้งหมดทำงานให้ฉัน ขอบคุณ @amcc!
jimmyplaysdrums

68

ใช้สิ่งนี้: แทนที่ github.com ด้วยชื่อโฮสต์ที่เหมาะสม

git remote set-url origin git@github.com:user/repo.git

git remote -vฉันมีชุดว่าเมื่อดู ถึงกระนั้นฉันยังคงได้รับพร้อมท์สำหรับรหัสผ่าน
IgorGanapolsky

ฉันได้ตั้งค่าตามที่เขาแนะนำ แต่ฉันยังคงได้รับพร้อมท์สำหรับรหัสผ่านฉันจะป้องกันได้อย่างไร
cyber8200

@IgorGanapolsky: คุณเคยพบวิธีแก้ปัญหาสำหรับคุณหรือไม่?
cyber8200

1
ทำงานได้อย่างถูกต้อง นี่เป็นเรื่องแปลกที่ URL ระยะไกลที่มีgit@**จะไม่แสดงข้อมูลรับรองและ URL ที่มีhttps@**:) ดังนั้นฉันจึงพบเอกสารนี้
Sujit Kumar Singh เมื่อ

54

อย่างที่คนอื่นพูดคุณสามารถติดตั้งตัวช่วยแคชรหัสผ่าน ฉันส่วนใหญ่แค่ต้องการโพสต์ลิงค์สำหรับแพลตฟอร์มอื่น ๆ ไม่ใช่เฉพาะ Mac ฉันใช้เซิร์ฟเวอร์ Linux และสิ่งนี้มีประโยชน์: การแคชรหัสผ่าน GitHub ของคุณใน Git

สำหรับ Mac:

git credential-osxkeychain

ของ windows:

git config --global credential.helper wincred

ลินุกซ์:

git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after 1 hour (setting is in seconds)

5
ฉันต้องเลื่อนลงไปที่คำตอบที่สามเพื่อดูคำแนะนำ Linux สิ่งเหล่านี้ควรอยู่ในคำตอบหลักเนื่องจากเป็นปัญหาที่อ้างอิงกันโดยทั่วไป
KoldBane

22

มองหาผู้ที่ขอให้คุณใส่ข้อความรหัสผ่าน มันเป็น Git หรือตัวแทน SSH ของคุณ?

ในกรณีของฉันทุกครั้งที่ฉันทำgit pullมันก็ถามฉัน:

Enter passphrase for key '/work/username/.ssh/id_rsa':

ฉันเลยคิดว่ามันคือ Git ที่ขอข้อความรหัสผ่าน ดังนั้นฉันจึงคอยหาทางแก้ปัญหาเท่านั้นที่จะรู้ในภายหลังว่าตัวแทน SSH ของฉันปิดตัวลง ซึ่งสามารถแก้ไขได้โดยใช้eval $(ssh-agent)และssh-addตามที่กำหนดไว้ที่นี่

กำลังวางตัวอย่างด้านล่างเล็กน้อยที่คุณสามารถเพิ่มลงใน~/.bashrcไฟล์ของคุณ(หรือเทียบเท่า) เพื่อให้แน่ใจว่าเอเจนต์ SSH ของคุณเริ่มต้นในการเข้าสู่ระบบของคุณ

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

# Start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."

    # Spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
    echo succeeded
    chmod 600 ${SSH_ENV}
    . ${SSH_ENV} > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . ${SSH_ENV} > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi


ค่อนข้างแน่ใจว่าคุณไม่มีบรรทัดในโค้ดด้านบน - ตามstackoverflow.com/a/18915067/277023คุณจำเป็นต้องมีSSH_ENV="$HOME/.ssh/environment"
kellyfj

20
git config credential.helper store

หมายเหตุ: แม้ว่าจะสะดวก Git จะจัดเก็บข้อมูลรับรองของคุณเป็นข้อความธรรมดาในไฟล์ท้องถิ่น (.git-credentials) ภายใต้ไดเรกทอรีโครงการของคุณ (ดูด้านล่างสำหรับไดเรกทอรี "home") หากคุณไม่ชอบสิ่งนี้ให้ลบไฟล์นี้แล้วเปลี่ยนไปใช้ตัวเลือกแคช

หากคุณต้องการให้ Git กลับมาขอข้อมูลประจำตัวทุกครั้งที่ต้องการเชื่อมต่อกับที่เก็บระยะไกลคุณสามารถเรียกใช้คำสั่งนี้:

git config --unset credential.helper

ในการจัดเก็บรหัสผ่านใน. git-credentials ในไดเรกทอรี% HOME% ของคุณซึ่งตรงข้ามกับไดเรกทอรีโครงการ: ใช้แฟล็ก --global

git config --global credential.helper store

9

คำแนะนำเกี่ยวกับ Git บน Windows และ GitHub โดยใช้ SSH เพื่อดัน / ดึง: คู่มือภาพประกอบ Git บน Windows

  1. ดาวน์โหลดและติดตั้ง PuTTY
  2. ตั้งค่าตัวแปรสภาพแวดล้อม 'GIT_SSH' = 'path \ to \ plink.exe' (ในโฟลเดอร์ putty ที่ติดตั้ง) - สำคัญมาก !!!
  3. รีสตาร์ท Windows Explorerเพื่อให้ตัวแปรสภาพแวดล้อมมีผล (ไม่สามารถรีสตาร์ทพร้อมรับคำสั่งเท่านั้น)
  4. เรียกใช้ puttygen.exe เพื่อสร้างรหัสใหม่คัดลอกกุญแจสาธารณะไปยังไซต์ GitHub
  5. บันทึกคีย์ส่วนตัวใหม่นี้ในที่ปลอดภัยบนดิสก์ (ไม่ควรใช้Dropbox )
  6. เรียกใช้ putty.exe และเชื่อมต่อ SSH กับ github.co
  7. ไปที่โฟลเดอร์เริ่มต้นอย่างรวดเร็วด้วยการเรียกใช้ "shell: startup"
  8. ทำให้การเริ่มต้นคีย์ส่วนตัวของคุณกับ Windows ผ่านการประกวด สร้างทางลัดในโฟลเดอร์เริ่มต้นด้วยไวยากรณ์ "path \ to \ pageant.exe" "path \ to \ privatekey"
  9. เราไม่จำเป็นต้องตั้งค่า 'puttykeyfile' ใน. git / config ของที่เก็บของเรา
  10. สำคัญมากคือใช้ "URL โคลน SSH" ของ GitHub ไม่ใช่ HTTPS

ไม่มีใครควรใช้ผงสำหรับอุดรูอีกต่อไป คุณสามารถทำทุกอย่างได้ทันทีด้วยยูทิลิตี้ Windows 10 ในตัว ให้สีโป๊วแค่เป็นสีโป๊ว
เอียนสมิ ธ

9

ใน Windows สำหรับ Git 1.7.9+ ให้เรียกใช้คำสั่งต่อไปนี้บนพรอมต์คำสั่งเพื่อเปิดไฟล์กำหนดค่าในโปรแกรมแก้ไขข้อความ:

    git config --global --edit

จากนั้นในไฟล์เพิ่มบล็อกต่อไปนี้หากไม่มีอยู่หรือแก้ไขตามนั้น:

    [credential "https://giturl.com"]
        username = <user id>
         helper = wincred

บันทึกและปิดไฟล์ คุณจะต้องให้ข้อมูลรับรองเพียงครั้งเดียวหลังจากการเปลี่ยนแปลงข้างต้น


งานนี้สมบูรณ์แบบคุณประหยัดเวลาของฉันตอนนี้ฉันสามารถมีสมาธิในการทำงานของฉันขอบคุณมากพี่ชาย
Mohammed Sufian

9

ใช้คำสั่งต่อไปนี้เพื่อเพิ่มระยะเวลาการหมดเวลาเพื่อให้คุณสามารถพิมพ์รหัสผ่านอีกครั้งในขณะที่

git config --global credential.helper 'cache --timeout 3600'

ฉันใช้มันเพื่อ Bitbucket และ GitHub ใช้ได้ทั้งสองอย่าง สิ่งเดียวที่คุณต้องทำ 3600คือในไม่กี่วินาที เพิ่มมันเท่าที่คุณต้องการ ฉันเปลี่ยน259200เป็นประมาณ 30 วัน วิธีนี้ฉันป้อนรหัสผ่านใหม่ทุก ๆ 30 วัน


1
ตกลงฉันพบว่าสิ่งนี้ไม่คงอยู่หลังจากรีสตาร์ทดังนั้นคุณยังต้องป้อนรหัสผ่านหลังจากรีสตาร์ทโดยไม่คำนึงถึงการหมดเวลา ...
Ben Winding

นี่เป็นวิธีที่ดีในการทำแคช :) บันทึกอย่างน้อยเวลาของฉัน ขอบคุณ
ChikuMiku

@BenWinding เนื่องจากเก็บข้อมูลรับรองไว้ในหน่วยความจำ
z3dd

5

ฉันคิดว่าคุณแก้ไขปัญหาของคุณ แต่ฉันไม่เห็นวิธีแก้ปัญหาที่นี่ที่ช่วยฉันดังนั้นนี่คือ

พิมพ์ใน terminal:

echo "" > ~/.ssh/known_hosts

นั่นจะทำให้known_hostsไฟล์ของคุณว่างเปล่าและคุณจะต้องเพิ่มทุกโฮสต์ที่คุณใช้และเชื่อมต่อด้วย แต่มันจะแก้ปัญหาได้


1
cat /dev/null > ~/.ssh/known_hostsจะทำเช่นเดียวกัน
ชายดีบุก

5
> ~/.ssh/known_hostsสั้นยิ่งขึ้น :)
Collin Allen

rm ~ / .ssh / known_hosts ควรทำงานเช่นกัน ฉันอยากจะแนะนำเรื่องนี้แม้ว่า
orkoden

3
หากคุณต้องการลบโฮสต์ออกจาก ~ / .ssh / known_hosts จะมีวิธีที่มีผลกระทบน้อยกว่าการลบไฟล์ออก ~ / .ssh / known_hosts เป็นเพียงไฟล์ข้อความและหากคุณสามารถค้นหาโฮสต์ที่ไม่เหมาะสมในไฟล์คุณสามารถลบบรรทัดได้ คุณอาจต้องการสำรองไฟล์ก่อนที่จะแก้ไข หากคุณมีเพียงไม่กี่รายการในไฟล์การลบออกอาจไม่ใช่ความคิดที่ผิด ฉันทำงานบนเซิร์ฟเวอร์จำนวนมากดังนั้น ~ / .ssh / known_hosts ของฉันมีหลายร้อยรายการในนั้นและฉันยังไม่พร้อมที่จะลบทั้งหมดเพื่อลบรายการบางรายการ
Tim Stewart

3
@papan สิ่งนี้ไม่ได้ป้องกันไม่ให้คอมไพล์ขอรหัสผ่านของฉัน!
IgorGanapolsky

5

ฉันรู้สึกเหมือนคำตอบที่ static_rtti ให้มานั้นเป็นเรื่องที่ไม่สมบูรณ์ ฉันไม่ทราบว่าสิ่งนี้มีให้ก่อนหน้านี้หรือไม่ แต่เครื่องมือของ Git มีพื้นที่เก็บข้อมูลรับรอง

โหมดแคช

$ git config --global credential.helper cache

ใช้โหมด“ แคช” เพื่อเก็บข้อมูลรับรองไว้ในหน่วยความจำในช่วงระยะเวลาหนึ่ง ไม่มีรหัสผ่านใด ๆ ที่เก็บไว้ในดิสก์และจะถูกลบออกจากแคชหลังจาก 15 นาที

โหมดร้านค้า

$ git config --global credential.helper 'store --file ~/.my-credentials'

ใช้โหมด“ store” เพื่อบันทึกข้อมูลรับรองไปยังไฟล์ข้อความธรรมดาบนดิสก์และจะไม่มีวันหมดอายุ

ผมเองใช้โหมดการจัดเก็บ ฉันลบที่เก็บข้อมูลของฉันโคลนแล้วต้องป้อนข้อมูลรับรองของฉันอีกครั้ง

อ้างอิง: 7.14 เครื่องมือ Git - ที่เก็บข้อมูลรับรอง


สำหรับ Windows credential.helper cacheไม่ทำงาน git config --global credential.helper wincredมันควรจะเป็น
Paulo Merson

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

ใน Linux นี่ทำงานให้ฉันgit config --local credential.helper storeได้ ในกรณีของฉันฉันผ่าน HTTPS ด้วยวิธีนี้ฉันพิมพ์ชื่อผู้ใช้ / รหัสผ่านเพียงครั้งเดียวและหลังจากนั้นข้อมูลประจำตัวของฉันจะถูกนำมาใช้ซ้ำจาก ~ /
.git

3

คำตอบของ orkoden เกี่ยวกับการใช้พวงกุญแจกับ Git ในเครื่องของคุณไม่สมบูรณ์และทำให้เกิดข้อผิดพลาด นี่คือสิ่งที่คุณต้องทำเพื่อบันทึกชื่อผู้ใช้และรหัสผ่านที่คุณป้อนในเทอร์มินัลในพวงกุญแจของคุณ:

curl http://github-media-downloads.s3.amazonaws.com/osx/git-credential-osxkeychain -o git-credential-osxkeychain
sudo mv git-credential-osxkeychain /usr/local/bin
sudo chmod u+x /usr/local/bin/git-credential-osxkeychain

จากนั้นใส่

git config --global credential.helper osxkeychain

หากคุณได้ทำส่วนที่มีการกำหนดค่า Git ก่อนสิ่งที่ขดแล้วจะไม่มีปัญหา มันจะทำงาน


1
ถ้าฉันใช้ linux ล่ะ
IgorGanapolsky

3

ตาม static_rtti กล่าวข้างต้นเปลี่ยน

https://github.com/username/repo.git
git://github.com/username/repo.git

ถึง

ssh://git@github.com/username/repo.git

ตัวฉันเองได้เปลี่ยนhttpsไฟล์. git / config เป็นsshแต่มันก็ยังไม่ทำงาน จากนั้นผมเห็นว่าคุณจะต้องเปลี่ยนไปgithub.com git@github.comวิธีที่ดีในการรับ URL ที่ถูกต้องคือไปที่หน้าโครงการของคุณแล้วคลิกที่

เปลี่ยน HTTPS เป็น SSH เพื่อรับ URL ที่ถูกต้อง

จากนั้นเพิ่ม URL นี้ลงในไฟล์กำหนดค่า


ฉันมีสิ่งนั้นในไฟล์ปรับแต่งแล้วฉันควรตรวจสอบอะไรอีก
cyber8200

คุณเปลี่ยนมันบน github.com เช่นกันหรือไม่?
CheesusCrust

3

บน Windows Subsystem สำหรับ Linux (WSL) นี่เป็นทางออกเดียวที่ฉันพบว่าทำงานได้:

eval `SSH-agent` ; ssh-add ~/.ssh/id_rsa

มันเป็นปัญหากับ ssh-agent ไม่ได้ลงทะเบียนอย่างถูกต้องใน WSL


เคยเป็นเด็ก แต่นี่คือสิ่งที่แก้ไขปัญหาของฉัน
Nam Kim

3

หากคุณต้องการหยุด Git จากการถามอยู่เสมอข้อมูลการเข้าสู่ระบบของที่เก็บ GitHub ของคุณคุณสามารถทำได้อย่างง่ายดาย

ใช้ SSH แทน HTTPS

คุณสามารถอัปเดตรีโมทระยะไกลโดยใช้ SSH แทน HTTPS "

git remote set-url origin git@github.com:username/your-repo.git

กำหนดค่า Git เพื่อจัดเก็บรหัสผ่านและชื่อผู้ใช้ของคุณ

นี่คือวิธีที่คุณสามารถทำให้ Git จัดเก็บชื่อผู้ใช้และรหัสผ่าน:

git config --global credential.helper store

ถัดไปบันทึกชื่อผู้ใช้และรหัสผ่านสำหรับเซสชัน:

git config --global credential.helper cache

2

ฉันเห็นด้วยกับ "codehugger" และใช้คำสั่งของ "orkoden" มันใช้งานได้สำหรับฉัน - บน NetBeans 7.3 - เมื่อคุณคลิกขวาที่ไฟล์และเลือกเมนูบริบท - กด - เปิดหน้าต่าง 'push to remote' - มีสอง ตัวเลือกที่นี่:

  1. origin:https://github.com/myaccount/myproject.git/

  2. https://github.com/myaccount/myproject.git/

อย่างที่คุณเห็นความแตกต่างคือพารามิเตอร์เริ่มต้นใน URL - คุณไม่ต้องการเลือกตัวเลือกนี้ (1) คุณต้องการตรวจสอบตัวเลือก (2) และมันใช้ได้ดีสำหรับฉัน


2

ขั้นตอนที่ 1: ตรวจสอบการกำหนดค่าปัจจุบันของคุณ

cat .git/config

คุณจะได้รับ:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = https://github.com/path_to_your_git.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[user]
    name = your_username
    email = your_email
[branch "master-staging"]
    remote = origin
    merge = refs/heads/master-staging

ขั้นตอนที่ 2: ลบต้นกำเนิดระยะไกลของคุณ

git remote rm origin

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

git remote add origin https://your_git_username:your_git_password@github.com/path_to_your_git.git

หลังจากที่คุณได้เพิ่มที่มาจากระยะไกลอีกครั้งคุณยังต้องสอดคล้องสาขาของคุณจากระยะไกลและท้องถิ่น - บางอย่างเช่นนี้ git branch --set-upstream master origin/master
ริชาร์ดโบล์

2

หาก Git ขอให้คุณใส่ชื่อผู้ใช้และรหัสผ่านทุกครั้งที่คุณพยายามโต้ตอบกับ GitHub คุณอาจใช้ HTTPS clone URL สำหรับที่เก็บของคุณ

การใช้ HTTPS รีโมต URL มีข้อดีบางประการ: การตั้งค่าง่ายกว่า SSH และมักจะทำงานผ่านไฟร์วอลล์และพร็อกซีที่เข้มงวด อย่างไรก็ตามจะแจ้งให้คุณป้อนข้อมูลประจำตัว GitHub ทุกครั้งที่คุณดึงหรือดันที่เก็บ

คุณสามารถกำหนดค่า Git เพื่อจัดเก็บรหัสผ่านให้คุณได้ สำหรับ Windows :

git config --global credential.helper wincred

2

ใช้ macOS Cataline 10.15 วิธีการแคชพวงกุญแจไม่ได้ผลสำหรับฉัน และฉันต้องการที่จะhttps://ไม่ใช้ssh

นี่คือสิ่งที่ทำงานให้ฉัน:

git remote rm origin

git remote add origin https://your_git_username:your_git_password@github.com/path_to_your_git.git

สิ่งนี้ควรใช้กับ GitLab ด้วย

ตรวจสอบให้แน่ใจว่าชื่อผู้ใช้มีที่อยู่อีเมลเพื่อลบ@emailส่วนหนึ่งหรือคุณจะได้รับข้อผิดพลาดที่ระบุURL using bad/illegal format or missing URLบางส่วนหรือคุณจะได้รับข้อผิดพลาดระบุ

หวังว่านี่จะช่วยได้!


นี่เป็นทางออกเดียวที่ใช้ได้สำหรับฉัน your_git_username สำคัญมาก ไม่จำเป็นต้องใส่: your_git_password ถึงตอนนี้แม้ว่ามันจะยังคงถาม "รหัสผ่าน" ตอนนี้มันจะยอมรับรหัสผ่านบัญชี
kbulgrien

1

มีการรับรองความถูกต้องหลายประเภทขึ้นอยู่กับการกำหนดค่าของคุณ นี่คือบางส่วน:

  1. git credential-osxkeychain.

    หากข้อมูลรับรองของคุณไม่ถูกต้องให้ลบออกโดย:

      git credential-osxkeychain erase
    

    หรือ:

      printf "protocol=https\nhost=github.com\n" | git credential-osxkeychain erase
    

    ดังนั้น Git จะไม่ขออนุญาตพวงกุญแจอีกครั้ง จากนั้นกำหนดค่าอีกครั้ง

    โปรดดู: การอัปเดตข้อมูลรับรองจาก OS X Keychainที่ GitHub

  2. คีย์ SSH RSA ของคุณ

    สำหรับสิ่งนี้คุณต้องเปรียบเทียบคีย์ SSH ของคุณกับสิ่งที่คุณเพิ่มตรวจสอบโดยssh-add -L/ ssh-add -lหากคุณใช้ข้อมูลประจำตัวที่ถูกต้อง

  3. การตรวจสอบสิทธิ์ HTTPS ของคุณ (หากคุณใช้httpsแทนsshโปรโตคอล)

    ใช้~/.netrc( %HOME%/_netrcบน Windows) เพื่อให้ข้อมูลประจำตัวของคุณเช่น

      machine stash1.mycompany.com
      login myusername
      password mypassword
    

เรียนรู้เพิ่มเติม: การซิงค์กับ GitHubที่ Stack Overflow




1

หากคุณกำลังใช้ Windows และสิ่งนี้เริ่มเกิดขึ้นทันทีทันใดบนฟ้าใน GitHub อาจเป็นเพราะการปิดการใช้งานล่าสุดของ GitHub สำหรับการสนับสนุนอัลกอริทึมการเข้ารหัสลับที่เลิกใช้ในปี 2018-02-22 ซึ่งในกรณีนี้ทางออกคือการดาวน์โหลดและติดตั้ง รุ่นล่าสุดของทั้งเต็มGit สำหรับ Windows หรือเพียงแค่ผู้จัดการ Git ข้อมูลประจำตัวสำหรับ Windows


0

โซลูชัน Microsoft Stack (Windows และ Azure DevOps)

ก่อนเปิด.git/configไฟล์เพื่อให้แน่ใจว่าที่อยู่ดูเหมือน:

protocol://something@url

เช่น. git / config สำหรับ Azure DevOps:

[remote "origin"]
    url = https://mystore@dev.azure.com/mystore/myproject/
    fetch = +refs/heads/*:refs/remotes/origin/*

หากปัญหายังคงมีอยู่ให้เปิด Windows Credential Managerคลิกที่กล่องนิรภัยชื่อWindows Credentialsและลบข้อมูลประจำตัวที่เกี่ยวข้องกับ git ทั้งหมด

ตอนนี้ครั้งต่อไปที่คุณเข้าสู่ระบบคอมไพล์มันจะไม่หายไปอีก


0

หากคุณมีการตั้งค่าตัวแทน SSH คุณสามารถเพิ่มสิ่งนี้ไป~/.gitconfigยังบังคับให้ git ใช้ SSH สำหรับ repos GitHub ทั้งหมดมากกว่า HTTPS:

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

(ถ้าคุณทำงานกับ repos สาธารณะเป็นส่วนใหญ่คุณสามารถใช้pushInsteadOfแทนได้insteadOfเนื่องจากการอ่านจาก repo สาธารณะสามารถทำได้โดยไม่ต้องมีการตรวจสอบสิทธิ์)

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