ชื่อผู้ใช้และรหัสผ่านในคำสั่งสำหรับ git push


110

เป็นไปได้ที่จะโคลนที่เก็บ git โดยระบุชื่อผู้ใช้และรหัสผ่านในคำสั่ง ตัวอย่าง:

git clone https://username:password@myrepository.biz/file.git

เป็นไปได้ไหมที่จะระบุชื่อผู้ใช้และรหัสผ่านเมื่อกด? ดังนั้นตัวอย่างเช่นการรันgit push origin --allจะแสดงผลขอรหัสผ่าน ฉันต้องการสิ่งนี้ในคำสั่งเดียว

(ฉันทราบถึงความสามารถในการตั้งค่าคีย์และวิธีแก้ไขปัญหาอื่น ๆ แต่ฉันต้องการทราบว่ามีวิธีเพียงแค่ใช้ชื่อผู้ใช้และรหัสผ่านต่อไปด้วยคำสั่งเดียวหรือไม่) ฉันใช้งาน Git Bash บน Windows 8.1


คุณหาทางออกสำหรับgit commit?
Nam Vu

คำตอบ:


158

ใช่คุณสามารถทำได้

git push https://username:password@myrepository.biz/file.git --all

ในกรณีนี้ให้https://username:password@myrepository.biz/file.gitแทนที่originในgit push origin --all

หากต้องการดูตัวเลือกเพิ่มเติมให้git pushลองgit help push


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

4
แทนที่จะใช้รหัสผ่านธรรมดาคุณสามารถใช้แฮชรหัสผ่านได้
Vasiliy Vanchuk

1
@VasiliyVanchuk คุณใช้แฮชแบบไหน? สิ่งนี้ใช้ได้กับ Github หรือไม่
Raphi

14
จะเกิดอะไรขึ้นถ้ารหัสผ่านมี@?
Rahul Sharma

2
แนะนำให้ใส่เส้นทางที่สมบูรณ์ด้วย' 'ตัวอย่างเช่นgit push 'https://username:password@myrepository.biz/file.git'
AlikElzin-kilaka

27

ฉันใช้รูปแบบด้านล่าง

git push https://username:password@myrepository.biz/file.git --all

และหากรหัสผ่านหรือชื่อผู้ใช้ของคุณมี @ แทนที่ด้วย% 40


คุณสามารถใช้ WebUtility.UrlEncode (รหัสผ่าน) เพื่อรับ% 40 นั้นได้
iPradeep

สำหรับผู้ใช้ PHP ใช้นี้นี้จะเข้ารหัสทุกตัวอักษรพิเศษไม่เพียง แต่urlencode($password) @
shyammakwana.me

3

ตามเอกสาร Gitอาร์กิวเมนต์สุดท้ายของgit pushคำสั่งอาจเป็นที่เก็บที่คุณต้องการพุชไป:

    git push [--all | --mirror | --tags] [-n | --dry-run] [--receive-pack=<git-receive-pack>]
             [--repo=<repository>] [-f | --force] [--prune] [-v | --verbose] [-u | --set-upstream]
             [<repository> [<refspec>…]]

และrepositoryพารามิเตอร์อาจเป็นURLหรือชื่อรีโมตก็ได้

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


2
ดูเหมือนว่าเหมาะสม แต่เมื่อฉันเพิ่ม git repo ด้วยชื่อผู้ใช้และรหัสผ่านเป็นอาร์กิวเมนต์ดังตัวอย่างมันยังคงแจ้งให้ป้อนรหัสผ่าน
Jake

3

Git จะไม่เก็บรหัสผ่านเมื่อคุณใช้ URL เช่นนั้น แต่จะจัดเก็บชื่อผู้ใช้ แต่จะต้องแจ้งให้คุณป้อนรหัสผ่านในครั้งต่อไปเท่านั้น ตามที่อธิบายไว้ในคู่มือการจัดเก็บรหัสผ่านที่คุณควรใช้ภายนอกผู้ช่วยการรับรอง สำหรับ Windows, คุณสามารถใช้ของ Windows Credential Store สำหรับ Git ตัวช่วยนี้จะถูกรวมโดยเริ่มต้นในGitHub สำหรับ Windows

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

แน่นอนว่านี่ใช้งานได้สำหรับการตรวจสอบสิทธิ์ผ่าน https เท่านั้น สำหรับการเข้าถึง ssh ( git@host.com/repository.git) คุณใช้คีย์ SSH และคีย์ที่คุณจำได้โดยใช้ssh-agent(หรือเพจของ PuTTY หากคุณใช้ plink)


4
"ฉันทราบถึงความสามารถในการตั้งค่าคีย์และวิธีแก้ปัญหาอื่น ๆ แต่ฉันต้องการทราบว่ามีวิธีเพียงแค่ใช้ชื่อผู้ใช้และรหัสผ่านต่อไปด้วยคำสั่งเดียวหรือไม่"
Marvin

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

4
แม้ว่าจะยังไม่ตอบคำถามของเขา
Marvin

3

เป็นไปได้ แต่ก่อน git 2.9.3 (สิงหาคม 2016) git pushจะพิมพ์ url แบบเต็มที่ใช้เมื่อดันกลับไปที่ repo ที่โคลน
ซึ่งจะรวมถึงชื่อผู้ใช้และรหัสผ่านของคุณ!

แต่ไม่มาก: ดูกระทำ 68f3c07 (20 กรกฎาคม 2016) และกระทำ 882d49c (14 กรกฎาคม 2016) โดยเจฟฟ์คิง (peff )
(รวมโดยJunio C Hamano - gitster-ในการกระทำ 71076e1 , 8 สิงหาคม 2016)

push: ไม่ระบุชื่อ URL ในเอาต์พุตสถานะ

Commit 47abd85 (ดึง: ดึงชื่อผู้ใช้ออกจาก url ก่อนจัดเก็บ, 2009-04-17, Git 1.6.4)สอนการดึงข้อมูลเพื่อไม่ระบุชื่อ URL
จุดประสงค์หลักคือเพื่อหลีกเลี่ยงการติดรหัสผ่านในข้อความผสาน แต่เป็นผลข้างเคียงเรายังหลีกเลี่ยงการพิมพ์รหัสผ่านไปยัง stderr

ด้านการผลักดันไม่ได้มีปัญหาการผสานกระทำ แต่มันอาจจะหลีกเลี่ยงการพิมพ์ให้พวกเขา stderr เราสามารถนำฟังก์ชันนิรนามเดิมกลับมาใช้ใหม่ได้

โปรดทราบว่าเพื่อให้สิ่งนี้เกิดขึ้นข้อมูลรับรองจะต้องปรากฏในบรรทัดคำสั่งหรือในไฟล์กำหนดค่า git ซึ่งทั้งสองอย่างนี้ไม่มีความปลอดภัยเป็นพิเศษ
ดังนั้นผู้คนควรเปลี่ยนไปใช้ตัวช่วยรับรองแทนซึ่งจะทำให้ปัญหานี้หมดไป

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


3

สำหรับใครก็ตามที่มีปัญหาเกี่ยวกับรหัสผ่านที่มีอักขระพิเศษเพียงแค่ละเว้นรหัสผ่านและระบบจะแจ้งให้คุณทราบ:

git push https://YOUR_GIT_USERNAME@github.com/YOUR_GIT_USERNAME/yourGitFileName.git

ดูเหมือนว่าคำตอบของคุณเป็นเพียงคำตอบเดียวในเว็บทั้งหมดที่ระบุว่าจะให้เฉพาะชื่อผู้ใช้อย่างไร
shuhalo

@PreetSangha คุณเปลี่ยนYOUR_GIT_USERNAMEเป็น usermame ของคุณหรือไม่และถ้าคุณไม่ได้ใช้ github.com คุณเปลี่ยนเป็นอย่างอื่นหรือไม่? คุณเปลี่ยนyourGitFileName.gitเป็นอย่างอื่นหรือไม่?
TheTechRobo36414519

@ TheTechRobo36414519 ขอโทษสำหรับความคิดเห็นของฉัน มันเกิดจากปัญหาการอนุญาตอื่น
เปรียญ

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