Git ขอชื่อผู้ใช้ทุกครั้งที่กด


675

เมื่อใดก็ตามที่ฉันพยายามที่จะผลักดันเข้าสู่คอมไพล์ repo username & passwordของฉันขอให้ทั้งสอง

ฉันไม่มีปัญหาในการป้อนรหัสผ่านใหม่ทุกครั้ง แต่ปัญหาคือการป้อนชื่อผู้ใช้ ฉันใช้httpsเพื่อโคลนที่เก็บของฉัน

ดังนั้นวิธีการที่ฉันสามารถกำหนดค่าคอมไพล์เพื่อที่จะไม่ถามหาในแต่ละusernamegit push

ฉันใหม่กับ linux แต่ IIRC ใน windows git pushจะขอรหัสผ่านเท่านั้น


1
คำถามที่เกี่ยวข้อง: stackoverflow.com/questions/2233590/...
Wug

@Wug: แต่ฉันไม่ต้องการเก็บรหัสผ่าน ฉันต้องการเก็บชื่อผู้ใช้เท่านั้น
RanRag

4
ลองทำตามคำแนะนำเหล่านั้นและข้ามบรรทัดรหัสผ่าน
Wug


นอกจากนี้ยังมีคำตอบสำหรับ superuser สำหรับคำถามเริ่มต้นของคุณ - superuser.com/questions/847181/ …
dk14

คำตอบ:


975

แก้ไข (โดย @ dk14 ตามที่ผู้ดูแลและความคิดเห็นแนะนำ)

คำเตือน: ถ้าคุณใช้credential.helper storeจากคำตอบรหัสผ่านของคุณจะถูกเก็บไว้ที่ไม่ได้เข้ารหัสสมบูรณ์ ( "จะเป็น") ~/.git-credentialsที่ โปรดอ่านหัวข้อความคิดเห็นด้านล่างหรือคำตอบจากส่วน "เชื่อมโยง" โดยเฉพาะอย่างยิ่งถ้านายจ้างของคุณไม่มีความอดทนสำหรับปัญหาด้านความปลอดภัย

แม้ว่าจะยอมรับ แต่ก็ไม่ได้ตอบคำถามของ OP จริง ๆ เกี่ยวกับการละเว้นชื่อผู้ใช้เท่านั้น (ไม่ใช่รหัสผ่าน) สำหรับผู้อ่านที่มีปัญหาแน่นอน @ คำตอบ grawity อาจเป็นประโยชน์


คำตอบเดิม (โดย @Alexander Zhu):

คุณสามารถจัดเก็บข้อมูลรับรองของคุณโดยใช้คำสั่งต่อไปนี้

$ git config credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>

นอกจากนี้ฉันขอแนะนำให้คุณอ่าน
$ git help credentials


160
คำเตือนไม่มีวิธีรักษาความปลอดภัยในวิธีนี้ รหัสผ่านของคุณถูกเก็บเป็นข้อความธรรมดา
Mark Lakata

13
คุณสามารถหาวิธีที่ดีกว่าในการรักษาความปลอดภัยได้ที่นี่ - stackoverflow.com/a/28104587/1809978
dk14

4
@MarkLakata - โปรดบอกฉันว่าฉันสามารถยกเลิกคำสั่งในคำตอบนี้ได้อย่างไร หลังจากเลิกทำฉันจะใช้วิธีการที่ปลอดภัยเพื่อเก็บข้อมูลรับรอง
MasterJoe2

25
@ testerjoe2 ลองgit config --unset credential.helper
dk14

1
อย่าลืมที่จะตั้งค่าการหมดเวลาเริ่มต้นคือ 15 นาที - ตั้งค่าเป็น 30 ล้านที่จะมีประมาณ 1 ปี พบได้ที่นี่: stackoverflow.com/a/35942890/1579667
Benj

180

คุณสามารถทำได้ใน.git/configไฟล์ของที่เก็บในเครื่องของคุณ ไฟล์นี้มีส่วนที่เรียกว่า 'ระยะไกล' พร้อมรายการที่เรียกว่า 'url' รายการ 'url' ควรมีลิงค์ https ของที่เก็บที่คุณกำลังพูดถึง

เมื่อคุณนำหน้า url ของโฮสต์ด้วยชื่อผู้ใช้ของคุณgitไม่ควรถามชื่อผู้ใช้ของคุณอีกต่อไป นี่คือตัวอย่าง:

url = https://username@repository-url.com

5
หากคุณใช้อักขระพิเศษในชื่อผู้ใช้หรือ pw คุณควรหลีกเลี่ยง ดูen.wikipedia.org/wiki/Percent-escapeสำหรับอักขระการหลบหนีที่ถูกต้อง ตัวอย่างเช่น "! @ #" [ไม่มีใบเสนอราคา] จะถูกแทนที่ด้วย "% 21% 40% 23" ดูคำตอบ "Daniel Lerch" ด้านล่าง
nsof

1
คนอื่นจะทำงานในพื้นที่เก็บข้อมูลเดียวกันจะเห็นชื่อผู้ใช้ของฉันหรือไม่
CodyBugstein

17
นี่ควรเป็นคำตอบที่ถูกต้องสำหรับคำถามของ OP เช่น "วิธีการยืนยันชื่อผู้ใช้ไม่ใช่รหัสผ่าน" คำตอบนี้ไม่เพียง แต่เป็นวิธีที่เหมาะสมในการยืนยันชื่อผู้ใช้ แต่ยังช่วยลดความเสี่ยงด้านความปลอดภัยที่อาจเกิดgit config credential.helper storeขึ้นด้วย
RayLuo

ฉันขอบคุณสำหรับคำตอบนี้และลองวิธีนี้ แต่ก็ยังถามฉันทุกครั้ง (v 2.1.4) - ลอง remoteurl ด้วย name@gitlab.com และชื่อ%40mailaddress.com@gitlab.com - มันมักจะถามusername for https://gitlab.com:
eli

1
ฉันลองและได้รับunable to access 'https://<me>@bitbucket.org:<x>/<y>.git/': Illegal port number
Ian Grainger

118

การตรวจสอบสิทธิ์อย่างถาวรด้วยที่เก็บ Git

รันคำสั่งต่อไปนี้เพื่อเปิดใช้งานการแคชหนังสือรับรอง:

$ git config credential.helper store
$ git push https://github.com/repo.git

Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>

ใช้ควรระบุการหมดอายุแคช

git config --global credential.helper "cache --timeout 7200"

หลังจากเปิดใช้งานการแคชข้อมูลประจำตัวก็จะถูกเก็บไว้สำหรับ7200 วินาที (2 ชั่วโมง)


อ่านเอกสารรับรอง

$ git help credentials

ผมตั้งหมดเวลาที่จะ 7200 แต่แล้วผมคิดว่าจะตั้งค่าให้ 5 สำหรับการทดสอบ ดังนั้นฉันจึงตั้งไว้ที่ 5 แต่แล้วเมื่อฉันพยายามที่จะผลักอีกครั้งหลังจาก 30 วินาที แต่ฉันไม่ได้ถามชื่อผู้ใช้หรือรหัสผ่าน
Buttle Butkus

อาจเป็นข้อมูลรับรองของคุณที่ไม่ได้จัดเก็บไว้ทั่วโลก
Jay Patel

เกี่ยวกับความปลอดภัยควรอ้างอิงเอกสาร: "คำสั่งนี้เก็บข้อมูลประจำตัวในหน่วยความจำเพื่อใช้งานโดยโปรแกรม Git ในอนาคตข้อมูลประจำตัวที่เก็บไว้จะไม่แตะดิสก์และถูกลืมหลังจากหมดเวลากำหนด" git-scm.com/docs/git-credential-cache
mloskot

2
ไม่ใช่git config credntial.helper storeคำสั่งที่เป็นอันตรายซึ่งรับผิดชอบการจัดเก็บ plaintext-credentials ในไฟล์ ~ / .git-credentials ฉันคิดว่า (และจากประสบการณ์ของฉัน) คำสั่ง ... แคช ...- ก็เพียงพอแล้ว: git config --clogal credential.helper 'cache --timeout 7200'มันสร้าง dir: ~/.git-credential-cacheด้วยไฟล์แคชในนั้นดังนั้นเพียงแค่รันคำสั่งนี้ไม่ใช่คำสั่ง "... store"
eli

ไม่ได้ผลสำหรับฉัน ยังคงขอรหัสผ่านทุกครั้ง
Ian Grainger

75

เพิ่มคีย์ SSH ใหม่ที่อธิบายไว้ในบทความนี้บน GitHub

หาก Git ยังคงขอชื่อผู้ใช้และรหัสผ่านให้ลองเปลี่ยน https://github.com/เป็นgit@github.com:URL ระยะไกล:

$ git config remote.origin.url 
https://github.com/dir/repo.git

$ git config remote.origin.url "git@github.com:dir/repo.git"

19
นี่ควรเป็นคำตอบที่ถูกต้อง! การบันทึกข้อมูลประจำตัวของคุณนั้นไม่ปลอดภัยอย่างไม่น่าเชื่อ หากฉันมีรหัส SSH อยู่ระบบจะขอข้อมูลรับรองจากฉันเพราะฉันไม่มี URL ที่ถูกต้องตามที่อธิบายไว้ที่นี่
Alexis Wilke

2
หรือคุณสามารถใช้git config remote.origin.url "ssh://git@yourRepoHost/yourRepoName.git"
ndarkness

1
git config remote.origin.url git@gitlab.com: adammajewski / ray-backward-iteration.git
อดัม

1
ขอบคุณนี่คือคำตอบที่ฉันต้องการ
Yupeng Tang

50

วิธีที่ง่ายที่สุดที่ฉันพบคือใช้คำสั่งนี้:

git config --global credential.https://github.com.username <your_username>

สิ่งนี้ทำงานบนไซต์ตามพื้นฐานของไซต์และแก้ไขการกำหนดค่า git ส่วนกลางของคุณ

หากต้องการดูการเปลี่ยนแปลงให้ใช้:

git config --global --edit

1
ด้วยเหตุผลบางอย่างนี่เป็นวิธีการเดียวที่เหมาะกับฉัน ขอบคุณ!
mathetes

วิธีนี้ปลอดภัยหรือไม่? รหัสผ่าน Github ถูกเก็บไว้ในคอมพิวเตอร์เฉพาะที่และไม่ถูกส่งไปยัง GitHub?
Akin Hwan

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

นอกจากนี้คุณยังสามารถเรียกใช้: [git config --global credential.helper 'cache --timeout = 3600'] ดังนั้นรหัสผ่านของคุณจะถูกบันทึกเป็นเวลาหนึ่งชั่วโมงในแต่ละครั้ง
obenda

31

หากคุณใช้ https แทน ssh คุณสามารถแก้ไข "url" ใน.git/configฐานะผู้ใช้ 701648 พูดว่า แต่ถ้าคุณต้องการคุณสามารถเพิ่มรหัสผ่านได้ด้วย:

url = https://username:password@repository-url.com

1
จะเกิดอะไรขึ้นถ้ามี@รหัสผ่านของฉันอยู่? url = https://username:abc@123@repository-url.comมันทำให้ฉันเข้าใจผิดว่าCould not resolve host: @123@git.com
Rahul Mankar

usernameส่วนหนึ่งดูเหมือนว่าจะถูกละเว้นเมื่อเปลี่ยนเส้นทางเซิร์ฟเวอร์ (เช่นจาก FOO เพื่อ FOO.git)
Mikhail T.

22

คุณสามารถตั้งชื่อผู้ใช้ของคุณสำหรับที่เก็บข้อมูลทั้งหมดในไซต์ที่กำหนดโดยการใส่สิ่งต่อไปนี้ในไฟล์กำหนดค่า Git คุณจะต้องเปลี่ยน " https://example.com " และ "me" เป็น URL จริงและชื่อผู้ใช้จริงของคุณ

[credential "https://example.com"]
    username = me

(นี่คือโดยตรงจาก "ข้อมูลความช่วยเหลือ git")


16

การเปลี่ยน repo ที่ลอกเลียนแบบทำงานได้:

git remote set-url origin git@github.com:gitusername/projectname.git

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


นี่เป็นคำตอบที่ถูกต้องสำหรับ GitHub (ซึ่งคำถามนี้ถามโดยเฉพาะ ... (ไม่แน่ใจว่าทำไมคุณถึงได้ลงคะแนน)
Tim Groeneveld

12

ตรวจสอบให้แน่ใจว่าคุณใช้ SSH แทน http ตรวจสอบนี้คำตอบ SO


3
แต่ฉันต้องใช้httpเพราะในมหาวิทยาลัยของฉันsshถูกบล็อกโดยแผนก sys-admin
RanRag

บางทีลิงก์นี้อาจช่วยคุณได้
gkris

มีหน้าช่วยเหลืออย่างเป็นทางการของ GitHub ในตอนนี้ สิ่งที่เกิดขึ้นกับฉันคือฉันได้เลียนแบบหนึ่งใน repos ของตัวเองก่อนที่จะเข้าสู่ระบบดังนั้นจึงไม่รู้จักฉันและตั้งค่าเริ่มต้นเป็น HTTPS ที่ฉันเชื่อ help.github.com/articles/changing-a-remote-s-url
anon58192932


9

นอกจากคำตอบของ user701648 คุณสามารถจัดเก็บข้อมูลประจำตัวของคุณในโฟลเดอร์บ้านของคุณ (ทั่วโลกสำหรับโครงการทั้งหมด) แทนที่จะเป็นโฟลเดอร์โครงการโดยใช้คำสั่งต่อไปนี้

$ git config --global credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>

9

เมื่อฉันเพียงดึง git git pull, git pull กำเนิด xxx, git จะถามทั้งชื่อผู้ใช้และรหัสผ่าน

git config credential.helper store

มันได้ผล.


9

วิธีที่ง่ายที่สุดคือการสร้าง~/.netrcไฟล์ที่มีเนื้อหาดังต่อไปนี้:

machine github.com
login YOUR_GITHUB_USERNAME
password YOUR_GITHUB_PASSWORD

(ดังแสดงที่นี่: https://gist.github.com/ahoward/2885020 )

คุณสามารถปิดสิทธิ์ในไฟล์นี้เพื่อให้ไม่มีใครสามารถอ่านรหัสผ่านของคุณได้โดยพิมพ์:

chmod 600 ~/.netrc

6

หากคุณใช้เวอร์ชั่นSSHคุณจะไม่มีปัญหากับรหัสผ่านเพียงครั้งเดียวที่คุณสร้างคีย์SSHเพื่อบอก git ว่าพีซีเครื่องนี้จะทำงานกับสิ่งนี้บัญชี GitHubและไม่ถามฉันเกี่ยวกับการเข้าถึงใด ๆ อีก (สำหรับพีซีเครื่องนี้)

วิธีการสร้าง SSH สำหรับ Github


4

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

git clone user_name@example.gitrepo.com/my_repo.git


3

ssh+ key authenticationเป็นวิธีที่เชื่อถือได้มากกว่าhttps+credential.helper

คุณสามารถกำหนดค่าให้ใช้ SSH แทน HTTPS สำหรับที่เก็บทั้งหมดดังนี้:

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

url.<base>.insteadOfเป็นเอกสารที่นี่


2

วิธีการด่วน

รับ ur ของคอมไพล์ของคุณเมื่อภายใน dir ทำงาน:

git config remote.origin.url

จากนั้น:

git config credential.helper store

git push "url of your git"

จะถามชื่อผู้ใช้และรหัสผ่านครั้งเดียว

เสร็จแล้ว


1

คุณสามารถวิ่งได้

git config --global credential.helper wincred

หลังจากติดตั้งและเข้าสู่ระบบ GIT สำหรับ windows ในระบบของคุณ


ไม่เห็นคำ linux ในแบบสอบถาม ไม่ดีของฉัน
cyperpunk

1

(เฉพาะสำหรับMac OS)

สำหรับวินโดวส์และลินุกซ์โปรดดูที่การเชื่อมโยงเอกสาร Github ของกล่าวถึงด้านล่าง

จากเอกสาร Github: ลิงก์เอกสาร

การแคชรหัสผ่าน GitHub ของคุณใน Git

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

    เพื่อตรวจสอบเวอร์ชั่น Git ของคุณ: git --version

  • เพื่อค้นหาตัวช่วย osxkeychainติดตั้งแล้ว:

    git credential-osxkeychain

    หากคุณได้รับคำตอบต่อไปนี้แสดงว่าคุณได้ติดตั้งแล้วและพร้อมใช้งานบน mac ของคุณ:

    > Usage: git credential-osxkeychain <get|store|erase>

    หากคุณไม่ได้รับการตอบสนองตามที่แสดงด้านบนคุณสามารถติดตั้งโดยใช้คำสั่งต่อไปนี้:

    git credential-osxkeychain

  • การบอก git ให้ใช้ทั่วโลก osxkeychain สำหรับหนังสือรับรอง git:

    git config --global credential.helper osxkeychain

    ก็จะแจ้งให้อีกครั้งก่อนมันจะช่วยประหยัดข้อมูลประจำตัวให้กับพวงกุญแจ

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