การเขียนสิ่งนี้สำหรับผู้ที่เพิ่งเริ่มต้นใช้งาน Git และ BitBucket บน Windows และผู้ที่ไม่คุ้นเคยกับ Bash (เนื่องจากเป็นทั้งปัญหาทั่วไปและผลการค้นหาระดับสูงของ Google เมื่อค้นหาข้อความแสดงข้อผิดพลาดภายในคำถาม)
สำหรับผู้ที่ไม่สนใจ HTTPS และผู้ที่กำลังมองหาวิธีการแก้ไขอย่างรวดเร็วให้เลื่อนไปที่ด้านล่างของคำตอบนี้เพื่อรับคำแนะนำภายใต้FOR THE LAZY
สำหรับผู้ที่ต้องการแก้ไขปัญหาจริงทำตามคำแนะนำด้านล่าง:
แก้ไขปัญหา SSH โดยเร็วที่สุด
นี่เป็นชุดคำสั่งที่ได้จาก URL ที่ลิงก์โดย VonC มันได้รับการดัดแปลงให้มีความยืดหยุ่นและรัดกุมที่สุด
ตั้งค่าข้อมูลส่วนกลางของคุณหากคุณยังไม่ได้ทำ:
$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"
ตรวจสอบ OpenSSH:
$ ssh -v localhost
OpenSSH_4.6p1, OpenSSL...
เห็นอะไรเช่นนั้น
- ใช่: ดำเนินการต่อ
- ไม่: ข้ามไปยังส่วนFOR THE LAZYหรือติดตามบทความที่เชื่อมโยงจาก VonC
ดูว่าคุณได้สร้างกุญแจแล้ว:
$ ls -a ~/.ssh/id_*
หากมีสองไฟล์คุณสามารถข้ามขั้นตอนถัดไปได้
$ ssh-keygen
ปล่อยให้ทุกอย่างเป็นค่าเริ่มต้นป้อนวลีรหัสผ่าน ตอนนี้คุณควรเห็นผลลัพธ์ด้วยคำสั่งนี้:
$ ls -a ~/.ssh/id_*
ตรวจสอบไฟล์กำหนดค่าที่มีอยู่:
$ ls -a ~/.ssh/config
หากคุณได้รับผลตรวจสอบไฟล์นี้สำหรับข้อมูลที่ผิดพลาด หากไม่มีไฟล์ให้ทำดังต่อไปนี้:
$ echo "Host bitbucket.org" >> ~/.ssh/config
$ echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config
ยืนยันเนื้อหา:
$ cat ~/.ssh/config
Host bitbucket.org
IdentityFile ~/.ssh/id_rsa
- ต้องเว้นช่องว่างก่อน "IdentityFile"
ตรวจสอบว่าคุณเริ่มต้นตัวแทน SSH ทุกครั้งที่คุณเรียกใช้ GitBash:
$ cat ~/.bashrc
- หากคุณเห็นฟังก์ชันที่เรียกว่า
start_agent
ขั้นตอนนี้เสร็จสมบูรณ์แล้ว
- หากไม่มีไฟล์ให้ทำต่อ
- หากมีไฟล์ที่ไม่มีฟังก์ชั่นนี้แสดงว่าคุณกำลังมีปัญหา มันอาจจะปลอดภัยที่จะผนวกเข้ากับมัน (ใช้คำแนะนำด้านล่าง) แต่มันอาจจะไม่ได้! ถ้าไม่แน่ใจให้สำรอง .bashrc ของคุณก่อนที่จะทำตามคำแนะนำด้านล่างหรือข้ามไปสำหรับคนขี้เกียจส่วน
ป้อนข้อมูลต่อไปนี้ใน GitBash เพื่อสร้างไฟล์. bashrc ของคุณ:
$ echo "SSH_ENV=$HOME/.ssh/environment" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "# start the ssh-agent" >> ~/.bashrc
$ echo "function start_agent {" >> ~/.bashrc
$ echo " echo \"Initializing new SSH agent...\"" >> ~/.bashrc
$ echo " # spawn ssh-agent" >> ~/.bashrc
$ echo " /usr/bin/ssh-agent | sed 's/^echo/#echo/' > \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo " echo succeeded" >> ~/.bashrc
$ echo " chmod 600 \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo " . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo " /usr/bin/ssh-add" >> ~/.bashrc
$ echo "}" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "if [ -f \"\${SSH_ENV}\" ]; then" >> ~/.bashrc
$ echo " . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo " ps -ef | grep \${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {" >> ~/.bashrc
$ echo " start_agent;" >> ~/.bashrc
$ echo " }" >> ~/.bashrc
$ echo "else" >> ~/.bashrc
$ echo " start_agent;" >> ~/.bashrc
$ echo "fi" >> ~/.bashrc
ตรวจสอบว่าไฟล์ถูกสร้างขึ้นสำเร็จ (คุณควรแตกต่างกันเฉพาะที่ชื่อ "yourusername" ปรากฏขึ้น):
$ cat ~/.bashrc
SSH_ENV=/c/Users/yourusername/.ssh/environment
# 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
- ปิด GitBash แล้วเปิดใหม่
- คุณควรถามรหัสผ่านของคุณ (สำหรับไฟล์ SSH ที่คุณสร้างไว้ก่อนหน้านี้)
- หากไม่มีพรอมต์แสดงว่าคุณไม่ได้ตั้งข้อความรหัสผ่านหรือ GitBash ไม่ได้รันสคริปต์. bashrc (ซึ่งน่าจะแปลกดังนั้นควรพิจารณาเนื้อหาของมันด้วย!) หากคุณใช้งานบน Mac (OS X) ระบบ
.bashrc
จะไม่ดำเนินการตามค่าเริ่มต้น - .bash_profile
คือ ในการแก้ไขปัญหานี้ให้วางตัวอย่างนี้ใน.bash_profile
:[[ -s ~/.bashrc ]] && source ~/.bashrc
หากคุณไม่ได้ป้อนข้อความรหัสผ่านคุณจะเห็นสิ่งนี้เมื่อเริ่ม GitBash:
Initializing new SSH agent...
succeeded
Identity added: /c/Users/yourusername/.ssh/id_rsa (/c/Users/yourusername/.ssh/id_rsa)
และต่อไปนี้ควรส่งคืนผลลัพธ์:
$ ssh-add -l
อย่างไรก็ตามหากคุณได้รับสิ่งต่อไปนี้จากssh-add -l
:
Could not open a connection to your authentication agent.
มันไม่ได้วางไข่ตัวแทน SSH และ. bashrc ของคุณน่าจะเป็นต้นเหตุ
หากเมื่อเริ่ม GitBash คุณจะเห็นสิ่งนี้:
Initializing new SSH agent...
sh.exe": : No such file or directory
นั่นหมายความว่าคุณลืมที่จะหลีกเลี่ยง $ ด้วย a เมื่อสะท้อนไปยังไฟล์ (เช่นตัวแปรถูกขยาย) สร้าง. bashrc ของคุณอีกครั้งเพื่อแก้ไขปัญหานี้
ตรวจสอบว่าเอเจนต์ทำงานอยู่และเพิ่มคีย์ของคุณแล้ว:
$ ssh-add -l
ควรส่งคืนสิ่งที่คล้ายกับสิ่งนี้:
2048 0f:37:21:af:1b:31:d5:cd:65:58:b2:68:4a:ba:a2:46 /Users/yourusername/.ssh/id_rsa (RSA)
เรียกใช้คำสั่งต่อไปนี้เพื่อรับกุญแจสาธารณะของคุณ:
$ cat ~/.ssh/id_rsa.pub
(ควรคืนบางสิ่งที่ขึ้นต้นด้วย "ssh-rsa ...... "
- คลิกที่ไอคอนหน้าต่าง GitBash
- คลิกแก้ไข
- คลิกทำเครื่องหมาย
- ไฮไลต์คีย์สาธารณะโดยใช้เมาส์ของคุณ (รวมถึงส่วนนำ
ssh-rsa
และส่วนท้าย== youremail@yourdomain.com
)
- คลิกขวาที่หน้าต่าง (ทำการคัดลอก)
- วางกุญแจสาธารณะของคุณลงใน Notepad
- ลบบรรทัดใหม่ทั้งหมดเพื่อให้เป็นเพียงบรรทัดเดียว
- กด
CTRL+A
จากนั้นCTRL+C
เพื่อคัดลอกกุญแจสาธารณะอีกครั้งไปยังคลิปบอร์ดของคุณ
กำหนดค่าคีย์ส่วนตัวของคุณด้วย BitBucket โดยทำตามขั้นตอนต่อไปนี้:
- เปิดเบราว์เซอร์ของคุณและไปที่ไซต์BitBucket.org
- เข้าสู่ระบบBitBucket.org
- คลิกที่รูปประจำตัวของคุณ (บนขวา)
- คลิกจัดการบัญชี
- คลิกคีย์ SSH (ภายใต้ความปลอดภัยในเมนูด้านซ้าย)
- คลิกเพิ่มคีย์
- ป้อน
Global Public Key
สำหรับป้ายกำกับ
- วางรหัสสาธารณะที่คุณคัดลอกจาก Notepad
Global Public Key
รายการในขณะนี้ควรจะมองเห็นในรายชื่อของปุ่ม
- กลับไป GitBash
- cd ในไดเรกทอรีที่มีโครงการของคุณ
- เปลี่ยนต้นกำเนิดของคุณเป็นรูปแบบ SSH (จะไม่เกิดขึ้นหากคุณดำเนินการตามขั้นตอนสำหรับ THE LAZY )
ตรวจสอบรีโมทของคุณ:
$ git remote -v
เปลี่ยนเป็น URL SSH:
$ git remote set-url origin git@bitbucket.org:youraccount/yourproject.git
ตรวจสอบสิ่งต่าง ๆ ให้เรียบร้อย:
$ git remote show origin
คุณควรเห็นสิ่งนี้:
Warning: Permanently added the RSA host key for IP address '...' to the list of known hosts.
* remote origin
Fetch URL: git@bitbucket.org:youruser/yourproject.git
Push URL: git@bitbucket.org:youruser/yourproject.git
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (fast-forwardable)
ทำ!
คุณสามารถเลือกใช้ HTTPS แทน SSH คุณจะต้องพิมพ์รหัสผ่านระหว่างการดำเนินการระยะไกล (แคชชั่วคราวหลังจากคุณพิมพ์ครั้งเดียว) นี่คือวิธีที่คุณสามารถกำหนดค่า HTTPS:
สำหรับขี้เกียจ
คุณควรแก้ไขปัญหา SSH ตามที่อธิบายโดย VonC แต่ถ้าคุณกำลังวิ่งที่จะกระทำและไม่ได้มีเครื่องมือที่ / เวลา / ความรู้ในการสร้างคีย์สาธารณะใหม่ในขณะนี้กำหนดแหล่งกำเนิดของคุณเพื่อเป็นทางเลือก HTTPS:
> https://accountname@bitbucket.org/accountname/reponame.git
โดยใช้เครื่องมือ GUI เช่นTortoiseGitหรือเครื่องมือบรรทัดคำสั่ง
นี่คือเอกสารของ URL ต้นทางอื่นนี้
บรรทัดคำสั่งเพื่อเพิ่มจุดเริ่มต้นหากไม่มีอยู่:
git remote add origin https://accountname@bitbucket.org/accountname/reponame.git
บรรทัดคำสั่งเพื่อเปลี่ยนต้นกำเนิดที่มีอยู่:
git remote set-url origin https://accountname@bitbucket.org/accountname/reponame.git
หมายเหตุ: ชื่อบัญชีของคุณไม่ใช่อีเมลของคุณ
คุณอาจต้องการตั้งค่าข้อมูลส่วนกลางของคุณ:
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
จากนั้นลองกดอีกครั้ง (ไม่จำเป็นต้องส่งอีกครั้ง)
git push origin master