ไม่สามารถ Git-push master ไปยัง Github - 'origin' ดูเหมือนจะไม่ใช่ git repository / permission ที่ถูกปฏิเสธ


84

คำถามนี้เกี่ยวข้องกับปัญหาของฉันในการทำความเข้าใจ rebase, branch และ mergeและกับปัญหา

คุณจะผูกมัดกับบัญชี github ของคุณได้อย่างไรเมื่อคุณมี teamMate ในรายการระยะไกลของคุณ

ฉันพบว่าคนอื่น ๆก็มีปัญหาเดียวกัน ดูเหมือนว่าปัญหาจะเกี่ยวข้องกับ /etc/xinet.d/

ปัญหา:ไม่สามารถส่งสาขาในพื้นที่ของฉันไปยังสาขาหลักที่ Github ได้

ฉันวิ่ง

git push origin master

ฉันเข้าใจ

fatal: 'origin' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

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

นี่เป็นเรื่องแปลกเนื่องจากฉันไม่ได้ลบ 'ต้นกำเนิด' สาขา

ต้นไม้คอมไพล์ของฉันคือ

  dev
* master
  ticgit
  remotes/Math/Math
  remotes/Math/master
  remotes/origin/master
  remotes/Masi/master

คุณจะผลักดันสาขาในพื้นที่ของคุณไปยัง Github ได้อย่างไรในขณะที่คุณมีสาขาของ teamMate ใน Git ในพื้นที่ของคุณ


คำตอบของ VonC ช่วยแก้ปัญหาหลักได้ ฉันใส่รหัสผ่านให้กับคีย์ ssh ของฉัน

ฉันวิ่ง

$git push github master     

ฉันเข้าใจ

Permission denied (publickey).
fatal: The remote end hung up unexpectedly

ดูเหมือนว่าฉันต้องให้รหัสผ่านสำหรับ Git อย่างใด

คุณจะทำให้ Github ขอรหัสผ่านแทนที่จะใช้คีย์ ssh ได้อย่างไร?


เพิ่งอัปเดตคำตอบของฉัน พารามิเตอร์ Ssh ไม่ใช่ทั้งหมด user.name และ github.user ก็สำคัญเช่นกัน
VonC

อัปเดตคำตอบของฉันอีกครั้งด้วยการตรวจสอบการกำหนดค่า ssh เพิ่มเติม
VonC

"ปฏิเสธการอนุญาต (คีย์สาธารณะ)" หมายความว่าคุณพยายามเข้าสู่ระบบโดยใช้คีย์สาธารณะของคุณและการอนุญาตถูกปฏิเสธแทนที่จะไม่ได้รับอนุญาตให้เข้าถึงคีย์สาธารณะของคุณ
Xiong Chiamiov

ปัญหาของฉันคือคีย์ ssh ที่แตกต่างจากระบบอื่น ฉันอัปโหลดคีย์อื่นและทุกอย่างเรียบร้อยดี ฉันพบมันด้วยเคล็ดลับ ssh -v git@github.com
nalply

คำตอบ:


96

อะไร

$ git config --get-regexp '^(remote|branch)\.'

ผลตอบแทน (ดำเนินการภายในที่เก็บ git ของคุณ)?

Origin เป็นเพียงหลักการตั้งชื่อเริ่มต้นสำหรับอ้างถึงที่เก็บ Git ระยะไกล

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

$ git remote add origin2 git@github.com:myLogin/myProject.git
$ git push origin2 master

(ฉันจะใช้ชื่อ 'github' มากกว่า 'origin' หรือ 'origin2')


ปฏิเสธการอนุญาต (คีย์สาธารณะ)
ถึงแก่ชีวิต: ปลายรีโมทวางสายโดยไม่คาดคิด

ตรวจสอบว่าตัวตนของคุณ GitHub มีการประกาศอย่างถูกต้องในพื้นที่เก็บข้อมูล Git ท้องถิ่นของคุณเป็นที่กล่าวถึงในคู่มือ GitHub ช่วยเหลือ (ทั้ง user.name และ github.name - และ github.token)

จากนั้นบล็อกของ Stoneanแนะนำ (เช่นเดียวกับMarcio Garcia ):

$ cd ~/.ssh
$ ssh-add id_rsa

Aral Balkanเพิ่ม: สร้างไฟล์กำหนดค่า

วิธีแก้ปัญหาคือสร้างไฟล์ config ภายใต้ ~ / .ssh / ตามที่ระบุไว้ที่ด้านล่างของส่วน OS X ของหน้านี้

นี่คือไฟล์ที่ฉันเพิ่มตามคำแนะนำในหน้าและการผลักดันของฉันก็เริ่มทำงานอีกครั้ง:

Host github.com
User git
Port 22
Hostname github.com
IdentityFile ~/.ssh/id_rsa
TCPKeepAlive yes
IdentitiesOnly yes

คุณยังสามารถโพสต์ผลลัพธ์ของไฟล์

ssh -v git@github.com

เพื่อรับข้อมูลเพิ่มเติมเกี่ยวกับสาเหตุที่การเชื่อมต่อ GitHub ssh ปฏิเสธคุณ

ตรวจสอบด้วยว่าคุณป้อนคีย์สาธารณะของคุณถูกต้องหรือไม่ (ต้องลงท้ายด้วย ' ==')
อย่าวางคีย์ส่วนตัวของคุณ แต่เป็นคีย์สาธารณะของคุณ คีย์สาธารณะจะมีลักษณะดังนี้:

ssh-rsa AAAAB3<big string here>== tek...@gmail.com 

(หมายเหตุ: คุณใช้รหัสผ่านสำหรับคีย์ ssh หรือไม่มันจะง่ายกว่าถ้าไม่มีข้อความรหัสผ่าน)

ตรวจสอบ url ที่ใช้เมื่อกด ( git@github.com/...ไม่ใช่git://github.com/...)

ตรวจสอบว่าคุณมี SSH Agent เพื่อใช้และแคชคีย์ของคุณ

ลองสิ่งนี้:

 $ ssh -i path/to/public/key git@github.com

หากได้ผลแสดงว่าไคลเอนต์ ssh ของคุณไม่ได้ส่งคีย์ของคุณไปยัง GitHub


1
แย่จังฉันโหวตคุณมากกว่าหนึ่งครั้งไม่ได้! ฉันมีปัญหานี้สองครั้งในสองสัปดาห์และหลังจากฉัน Google มันทุกครั้งที่ฉันพบโพสต์ SO นี้ ขอบคุณ! :)
Ionuț Staicu

1
ฉันกำลังต่อสู้กับสิ่งนี้ - ฉันเปลี่ยนการกำหนดค่าคอมไพล์ทั้งหมด แต่ ssh-add เป็นขั้นตอนที่ฉันพลาด - ขอบคุณมาก!
metadaddy

มันเป็นเพียงคำแนะนำเล็ก ๆ น้อย ๆ ในบริบทของคำตอบที่ยอดเยี่ยมนี้ - แต่ฉันชอบเล็กน้อยเกี่ยวกับการเปลี่ยนชื่อ "Origin" เป็น "GitHub" (หรือชื่อเซิร์ฟเวอร์) ซึ่งช่วยในการกำหนดแนวความคิดว่าคุณจะส่งของไปที่ใด
Alex C

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

help.github.com/win-set-up-gitติดตามจนจบ - มันช่วยฉันได้ ปฏิเสธการอนุญาต (คีย์สาธารณะ) - หมายความว่าคุณได้ตั้งค่าคีย์ ssh สำหรับคอมไพล์ในเครื่องของคุณ ssh-keygen -t rsa -C "your_email@youremail.com"
Roger Alien

28

นี่เป็นปัญหากับรีโมทของคุณ เมื่อคุณทำgit push origin master, originเป็นระยะไกลและmasterเป็นสาขาที่คุณกำลังผลักดัน

เมื่อคุณทำสิ่งนี้:

git remote

ฉันเดิมพันไม่รวมoriginรายการ ในการเพิ่มรีโมตต้นทางอีกครั้ง:

git remote add origin git@github.com:your_github_username/your_github_app.git

หรือหากมีอยู่ แต่มีรูปแบบไม่ถูกต้อง:

git remote rm origin
git remote add origin git@github.com:your_github_username/your_github_app.git

10

คำตอบของ VonC นั้นดีที่สุด แต่ส่วนที่ได้ผลสำหรับฉันนั้นเรียบง่ายมากและถูกฝังอยู่ในคำตอบอื่น ๆ ที่เป็นไปได้มากมาย หากคุณเป็นเหมือนฉันคุณพบปัญหานี้ขณะเรียกใช้บทแนะนำ "เริ่มต้นใช้งานราง" และคุณไม่ได้ตั้งค่าคีย์ SSH สาธารณะ / ส่วนตัว

ถ้าเป็นเช่นนั้นให้ลองทำดังนี้

  1. $>cd ~/.ssh

  2. $>ls

  3. หากผลลัพธ์ของ ls ไม่เป็นknown_hostsอย่างอื่นโปรดไปที่: http://help.github.com/mac-key-setup/และเริ่มทำตามคำแนะนำจากส่วน "การสร้างคีย์" และลง

หลังจากเรียกใช้คำสั่งเหล่านั้นคำสั่ง "git push origin master" ของฉันก็ใช้งานได้


ฉันแค่มองหาหน้านี้ กว่าเยอะ! = D
Hugo Mota

มันช่วยแก้ปัญหาของฉันได้ ระบบปฏิบัติการของฉันคือ Mac OS X และฉันติดตามหนังสือ "Ruby on Rails 3 Tutorial" และฉันติดอยู่ที่หัวข้อ 1.3.4 เมื่อฉันต้องทำgit push origin master.มันเป็นครั้งแรกที่ฉันตั้งค่า Git และ Rails หวังว่าสิ่งนี้จะช่วยคนอื่น ๆ
sivabudh

4

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

นี่คือตัวอย่างสิ่งที่ใช้ได้ผลสำหรับฉัน (เพียงเพื่อแบ่งปันกับผู้ที่ไม่สามารถใช้ git: // protocol :)

git fetch https://[user-name]@github.com/[user-name]/[project].git

หากวิธีการข้างต้นใช้งานได้คุณสามารถลบจุดเริ่มต้นและแทนที่ด้วย

git remote rm origin  
git remote add origin https://[user-name]@github.com/[user-name]/[project].git

1
คุณสามารถใช้~/.netrcไฟล์เก็บรหัสผ่านสำหรับคุณได้หากต้องการ มันถูกใช้โดยcurlgit ที่ใช้สำหรับการโอน HTTP (S) ในกรณีที่คุณต้องการค้นหาวิธีการใช้งานโดยเฉพาะ
Arrowmaster

1
@Arrowmaster: โปรดทราบว่าหากคุณใช้ Windows คุณต้องใช้~/_netrc(' _' ไม่ใช่ ' .')
VonC

ขอบคุณสำหรับความคิดเห็นฉันจะพยายาม!
ken

สิ่งนี้ได้ผลสำหรับฉัน ขอบคุณ. ฉันสงสัยว่านี่เป็นข้อบกพร่องหรือไม่
Larry Battle

1

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

แก้ไข: นอกจากนี้โพสต์ในฟอรัม xinet.d ยังอ้างถึงการรัน git-daemon เป็นบริการเพื่อให้บุคคลอื่นสามารถดึงออกจากระบบของคุณได้ ไม่จำเป็นต้องรัน git-daemon เพื่อส่งไปยัง github


1
ฉันเพิ่มคีย์สาธารณะลงในบัญชี github ของฉัน - ปัญหาเริ่มต้นหลังจากที่ฉันเพิ่มสาขาระยะไกลไปยัง Git ของฉัน
LéoLéopold Hertz 준영

1
ฉันสร้างคู่คีย์ ssh ใหม่ ฉันวางคีย์ใหม่ลงใน Github และลบคีย์เก่าออกจาก Github ปัญหาเดิมยังคงมีอยู่
LéoLéopold Hertz 준영

1

ฉันพบปัญหาเดียวกันและฉันเพิ่งเพิ่มเนื้อหาของ ~ / .ssh / id_rsa.pub ในบัญชีของฉันใน GitHub หลังจากนั้นให้ลองอีกครั้งgit push origin masterก็ควรใช้งานได้


0

สิ่งสำคัญที่ต้องจำคือ 'ต้นกำเนิด' ไม่ใช่ค่าที่คุณอาจต้องใช้ ... มันใช้ได้ผลกับฉันเมื่อฉันแทนที่ 'ต้นกำเนิด' ด้วยชื่อ repo


0

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


0

ฉันมีปัญหานี้และลองใช้วิธีแก้ปัญหาต่าง ๆ เพื่อแก้ไขรวมถึงสิ่งที่ระบุไว้ข้างต้น (ไฟล์ config, debug ssh ฯลฯ ) ในท้ายที่สุดฉันแก้ไขได้โดยรวมสวิตช์-uใน git push ตามคำแนะนำ github เมื่อสร้างที่เก็บใหม่ในไซต์ - Github new Repository

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