Git / GitHub ไม่สามารถผลักดันให้เป็นผู้เชี่ยวชาญ


151

ฉันใหม่สำหรับ Git / GitHub และพบปัญหา ฉันสร้างโครงการทดสอบและเพิ่มลงในที่เก็บภายในเครื่อง ตอนนี้ฉันกำลังพยายามเพิ่มไฟล์ / โครงการไปยังที่เก็บระยะไกล

นี่คือสิ่งที่ฉันทำ (และใช้งานได้) -

git remote add origin git://github.com/my_user_name/my_repo.git

ตอนนี้เมื่อฉันพยายามผลักดันพื้นที่เก็บข้อมูลไปยัง GitHub โดยใช้คำสั่งต่อไปนี้ฉันได้รับข้อผิดพลาดดังต่อไปนี้ -

git push origin master

ข้อผิดพลาด -

fatal: remote error:
You can't push to git://github.com/my_user_name/my_repo.git
Use git@github.com:my_user_name/my_repo.git

มีลิงค์ช่วยเหลือ ( help.github.com ) ที่ด้านล่างของหน้า GitHub ทั้งหมด ความช่วยเหลืออธิบายหลายหัวข้อรวมถึงหัวข้อนี้ ฉันขอแนะนำให้อ่านสิ่งเหล่านั้นแล้วถามคำถามเกี่ยวกับสิ่งที่คุณไม่เข้าใจ
jamessan

21
หาก jamessan ชี้ไปที่ตำแหน่งเฉพาะในหน้าช่วยเหลือนั่นจะมีประโยชน์มากกว่า
Deonomo

1
ความเป็นไปได้ที่ซ้ำกันของgit git
gub

คำตอบ:


244

GitHub ไม่สนับสนุนการผลักดันโปรโตคอล Git ซึ่งระบุโดยการเริ่มต้น URL ของgit://คุณ ตามที่ข้อความแสดงข้อผิดพลาดบอกว่าถ้าคุณต้องการพุชคุณควรใช้ SSH URL git@github.com:my_user_name/my_repo.gitหรือโปรโตคอล "สมาร์ท HTTP" โดยใช้https://URL ที่ GitHub แสดงให้คุณเห็นสำหรับที่เก็บของคุณ

(อัปเดต: ทำให้ประหลาดใจของฉันบางคนคิดว่าด้วยเหตุนี้ฉันแนะนำว่า "https" หมายถึง "smart HTTP" ซึ่งฉันไม่ได้ Git เคยมีโปรโตคอล "dumb HTTP" ซึ่งไม่อนุญาตให้มีการผลักดันมาก่อน "smart HTTP" ที่ GitHub ใช้นั้นถูกนำมาใช้ - สามารถใช้ได้มากกว่าhttpหรืออย่างใดอย่างหนึ่งhttpsความแตกต่างระหว่างโปรโตคอลการถ่ายโอนที่ใช้โดย Git อธิบายไว้ในลิงค์ด้านล่าง)

หากคุณต้องการเปลี่ยน URL ต้นทางคุณสามารถทำได้:

git remote set-url origin git@github.com:my_user_name/my_repo.git

หรือ

git remote set-url origin https://github.com/my_user_name/my_repo.git

ข้อมูลเพิ่มเติมสามารถดูได้ใน10.6 Git Internals - โปรโตคอลการถ่ายโอน


ดังนั้นฉันจึงเปลี่ยน URL และลองใหม่อีกครั้งรับข้อผิดพลาดตอนนี้ - ข้อผิดพลาด: my_user_name / my_repo.git ไม่มีอยู่ คุณป้อนถูกต้องหรือไม่ ร้ายแรง: ปลายระยะไกลวางสายโดยไม่คาดคิด
kapso

URL ที่คุณตั้งไว้นั้นเป็น URL ที่คุณสามารถคัดลอกและวางจากหน้าเว็บสำหรับที่เก็บข้อมูลของคุณบน GitHub หรือไม่ (เป็นตัวพิมพ์เล็กและใหญ่โดยบังเอิญ)
Mark Longair

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

1
ฉันเพิ่งมีปัญหาเดียวกันนี้มาก ที่จริงปัญหาคือคุณมีเครื่องหมายทับ "/" อยู่ระหว่าง github.com กับชื่อผู้ใช้ของคุณ และควรเป็นเครื่องหมายโคลอน ":" นั่นคือปัญหา: D
Wilmer E. Henao

2
@WilmerEHenaoH: นั่นอาจเป็นปัญหาของคุณแต่มันไม่ใช่ปัญหาในคำถามหรือในคำตอบของฉัน) (เพื่อความสนใจบางครั้งก็มีความสับสนเกี่ยวกับ SSH URL สองรูปแบบในคอมไพล์ซึ่งหนึ่งในนั้นใช้ ลำไส้ใหญ่ชื่อโฮสต์แยกต่างหากและเส้นทางและอื่น ๆ ที่ไม่ได้).
มาร์ค Longair

37

ใช้คำตอบของ Mark Longairแต่ให้แน่ใจว่าใช้ลิงก์ HTTPS ไปยังที่เก็บ:

git remote set-url origin https://github.com/my_user_name/my_repo.git

git push origin masterคุณสามารถใช้แล้ว


1
มันใช้งานได้สำหรับฉัน จากนั้นเพียงพิมพ์git pushยังใช้งานได้
อายุ

13

วิธีแก้ปัญหาของ Mark Longair git remote set-url...นั้นค่อนข้างชัดเจน นอกจากนี้คุณยังสามารถรับพฤติกรรมเดียวกันได้โดยแก้ไขส่วนนี้ของไฟล์. git / config โดยตรง:

ก่อน:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git://github.com/my_user_name/my_repo.git

หลังจาก:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@github.com:my_user_name/my_repo.git

(และในทางกลับกันการgit remote set-url...เรียกใช้จะทำให้เกิดการเปลี่ยนแปลงข้างต้น)


2

มีวิธีแก้ปัญหาง่ายๆสำหรับผู้ที่เพิ่งเริ่มทำสิ่งนี้:

แก้ไขไฟล์กำหนดค่าในไดเรกทอรี. git ท้องถิ่นของคุณ ( config) เปลี่ยนgit:เป็นhttps:ด้านล่าง

[remote "origin"]
    url = https://github.com/your_username/your_repo

1
โปรโตคอล https ไม่ถูกต้องจะไม่อนุญาตให้มีการพุช ดู: หนังสือ "Pro Git", ส่วน 4.1.4 "HTTP / S Protocol" Link: git-scm.com/book/en/v2
Kevin J. Rice

@ KevinJ.Rice: เอ่อมันพูดแบบนั้นเหรอ? Github ใช้โปรโตคอล HTTP และสมาร์ทที่ช่วยให้การผลักดันเพียงแค่ปรับ
Martijn Pieters

1

ฉันมีปัญหานี้หลังจากอัปเกรดไคลเอ็นต์ Gitและทันใดนั้นที่เก็บของฉันก็ไม่สามารถผลักดันได้

ฉันพบว่ารีโมตเก่าบางตัวมีค่าที่ไม่ถูกต้องurlแม้ผ่านรีโมตที่ใช้งานอยู่ในปัจจุบันมีค่าเท่ากันurlและทำงานได้ดี

แต่มันก็มีpushurlparam ด้วยดังนั้นการเพิ่มมันสำหรับ remote เก่า ๆ ก็ใช้ได้สำหรับฉัน:

ก่อน:

[remote "origin"]
    url = git://github.com/user/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    pushurl = git@github.com:user/repo.git

หมายเหตุ: ส่วนหนึ่งของไฟล์ "config" นี้ไม่ได้ใช้งานมานาน แต่ลูกค้าใหม่บ่นเกี่ยวกับ URL ที่ไม่ถูกต้อง:

[remote "composer"]
    url = git://github.com/user/repo.git
    fetch = +refs/heads/*:refs/remotes/composer/*

ดังนั้นฉันจึงเพิ่มpushurlพารามิเตอร์ในรีโมตเก่า:

[remote "composer"]
    url = git://github.com/user/repo.git
    fetch = +refs/heads/*:refs/remotes/composer/*
    pushurl = git@github.com:user/repo.git

1

ข้อผิดพลาดนี้เกิดขึ้นเมื่อคุณโคลน repo โดยใช้การโทรเช่น:

git clone git://github.com/....git

สิ่งนี้จะทำให้คุณเป็นผู้ใช้แบบดึงเท่านั้นที่ไม่สามารถผลักดันการเปลี่ยนแปลงได้

ฉันแก้ไขได้โดยการเปิด.git/configไฟล์repo ของฉันและเปลี่ยนบรรทัด:

[remote "origin"]
    url = git://github.com/myusername/myrepo.git

ถึง:

[remote "origin"]
    url = ssh+git://git@github.com/myusername/myrepo.git

ssh+gitโปรโตคอลนี้กับgitผู้ใช้เป็นกลไกการตรวจสอบที่ต้องการโดย Github

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



0

ฉันเพิ่ม pubkey ของฉันไปที่ github.com และนี่ก็ประสบความสำเร็จ:

ssh -T git@github.com

แต่ฉันได้รับข้อผิดพลาด "คุณไม่สามารถผลักดัน" ได้หลังจากทำสิ่งนี้อย่างผิดพลาด:

git clone git://github.com/mygithubacct/dotfiles.git
git remote add origin git@github.com:mygithubacct/dotfiles.git
...edit/add/commit
git push origin master

แทนที่จะทำสิ่งที่ฉันควรทำ:

mkdir dotfiles
cd dotfiles
git init
git remote add origin git@github.com:mygithubacct/dotfiles.git
git pull origin master
...edit/add/commit
git push origin master

0

หากต้องการตั้งค่าhttpsทั่วโลกแทนgit://:

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


-1

วิธีที่เร็วที่สุดที่ yuo จะเอาชนะได้คือการแทนที่ originด้วยคำแนะนำที่ให้

แทนที่จะgit push origin masterใช้:

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