Git / GitHub không thể đẩy thành chủ


151

Tôi mới sử dụng Git / GitHub và gặp phải một vấn đề. Tôi đã tạo một dự án thử nghiệm và thêm nó vào kho lưu trữ cục bộ. Bây giờ tôi đang cố gắng thêm tập tin / dự án vào kho lưu trữ từ xa.

Đây là những gì tôi đã làm (và điều này đã làm việc) -

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

Bây giờ khi tôi cố gắng đẩy kho lưu trữ sang GitHub, sử dụng lệnh sau, tôi gặp lỗi sau -

git push origin master

Lỗi -

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

Có một liên kết trợ giúp ( help.github.com ) ở cuối tất cả các trang github. Sự giúp đỡ mô tả nhiều chủ đề bao gồm cả chủ đề này. Tôi khuyên bạn nên đọc những điều đó và sau đó đặt câu hỏi về những điều cụ thể mà bạn không hiểu.
jamessan

21
nếu jamessan đã chỉ đến một vị trí cụ thể trong các trang trợ giúp, điều đó sẽ hữu ích hơn.
Deonomo

Câu trả lời:


244

GitHub không hỗ trợ đẩy giao thức Git, điều này được biểu thị bằng việc bạn sử dụng URL bắt đầu git://. Như thông báo lỗi cho biết, nếu bạn muốn đẩy, bạn nên sử dụng URL SSH git@github.com:my_user_name/my_repo.githoặc giao thức "HTTP thông minh" bằng cách sử dụng https://URL mà GitHub hiển thị cho bạn cho kho lưu trữ của bạn.

(Cập nhật: thật ngạc nhiên, một số người dường như nghĩ rằng bằng cách này, tôi đã gợi ý rằng "https" có nghĩa là "HTTP thông minh", mà tôi không có. "HTTP thông minh" mà GitHub sử dụng đã được giới thiệu - có thể được sử dụng trên một trong hai httphoặc https. Sự khác biệt giữa các giao thức chuyển giao được sử dụng bởi Git được giải thích trong liên kết bên dưới.)

Nếu bạn muốn thay đổi URL xuất xứ, bạn chỉ cần làm:

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

hoặc là

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

Thông tin thêm có sẵn trong 10.6 Git Internals - Giao thức chuyển tiền .


Vì vậy, tôi đã thay đổi URL và thử lại lần đẩy, nhận lỗi này ngay bây giờ - LRI: my_user_name / my numpo.git không tồn tại. Bạn đã nhập chính xác? gây tử vong: Kết thúc từ xa treo lên bất ngờ
kapso

URL bạn đã đặt chắc chắn là URL mà bạn có thể sao chép và dán từ trang cho kho lưu trữ của mình trên GitHub? (Đó là trường hợp nhạy cảm, tình cờ.)
Mark Longair

1
OK, bạn phải tạo kho lưu trữ trên GitHub trước khi bạn có thể đẩy nó - khi bạn làm như vậy, nó sẽ cung cấp cho bạn hướng dẫn về cách sao chép hoặc đẩy vào kho lưu trữ.
Đánh dấu Longair

1
Tôi chỉ có vấn đề này rất giống nhau. Trên thực tế, vấn đề là bạn đã gạch chéo "/" ngay giữa github.com và tên người dùng của bạn. Và nó phải là dấu hai chấm ":". Đó là vấn đề: D
Wilmer E. Henao

2
@WilmerEHenaoH: đó có thể là vấn đề của bạn , nhưng đó không phải là vấn đề trong câu hỏi hoặc với câu trả lời của tôi;) (Chỉ vì quan tâm, đôi khi có sự nhầm lẫn về hai kiểu URL SSH trong git , một trong số đó sử dụng dấu hai chấm để phân tách tên máy chủ và đường dẫn và tên khác không có.)
Mark Longair

37

Sử dụng câu trả lời của Mark Longair , nhưng đảm bảo sử dụng liên kết HTTPS đến kho lưu trữ:

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

Bạn có thể sử dụng sau đó git push origin master.


1
Nó làm việc cho tôi. Sau đó chỉ cần gõ git pushcũng hoạt động.
youngzy

13

Giải pháp của Mark Longair sử dụng git remote set-url...khá rõ ràng. Bạn cũng có thể có hành vi tương tự bằng cách chỉnh sửa trực tiếp phần này của tệp .git / config:

trước:

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

sau:

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

(Và ngược lại, git remote set-url...lời mời tạo ra sự thay đổi ở trên.)


2

Có một giải pháp đơn giản cho việc này đối với người mới làm điều này:

Chỉnh sửa tệp cấu hình trong thư mục .git ( config) cục bộ của bạn . Thay đổi git:để https:bên dưới.

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

1
Không chính xác, giao thức https sẽ không cho phép đẩy. Xem: sách "Pro Git", phần 4.1.4 "Giao thức HTTP / S". Link: git-scm.com/book/en/v2
Kevin J. Rice

@ KevinJ.Rice: uhm, nơi nào nó nói rằng ? Github sử dụng giao thức HTTP thông minh và cho phép đẩy tốt .
Martijn Pieters

1

Tôi gặp vấn đề này sau khi nâng cấp máy khách Git và đột nhiên kho lưu trữ của tôi không thể đẩy được.

Tôi thấy rằng một số điều khiển từ xa cũ có giá trị sai url, thậm chí thông qua điều khiển từ xa hiện đang hoạt động của tôi có cùng giá trị urlvà hoạt động tốt.

Nhưng đó cũng là thông số pushurl, vì vậy việc thêm nó cho điều khiển từ xa cũ đã làm việc cho tôi:

Trước:

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

LƯU Ý: Phần này của tệp "config" không được sử dụng từ lâu, nhưng ứng dụng khách mới phàn nàn về URL sai:

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

Vì vậy, tôi đã thêm pushurlparam vào điều khiển từ xa cũ:

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

1

Lỗi này xảy ra khi bạn sao chép một repo bằng một cuộc gọi như:

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

Điều này về cơ bản thiết lập bạn là người dùng chỉ kéo, người không thể thay đổi.

Tôi đã sửa lỗi này bằng cách mở .git/configtệp repo của mình và thay đổi dòng:

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

đến:

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

ssh+gitGiao thức này với gitngười dùng là cơ chế xác thực được Github ưa thích.

Các câu trả lời khác được đề cập ở đây về mặt kỹ thuật hoạt động, nhưng tất cả chúng dường như bỏ qua ssh, yêu cầu bạn nhập thủ công mật khẩu mà bạn có thể không muốn.



0

Tôi đã thêm pubkey của mình vào github.com và điều này đã thành công:

ssh -T git@github.com

Nhưng tôi đã nhận được lỗi "Bạn không thể đẩy" sau khi thực hiện sai điều này:

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

Thay vì làm những gì tôi nên làm:

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

Để đặt httpstoàn cầu thay vì git://:

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

0

Các cmnd dưới đây sẽ khắc phục vấn đề.

 git pull --rebase
 git push

-1

Cách nhanh nhất để yuo vượt qua nó là thay thế origin bằng gợi ý mà nó đưa ra.

Thay vì git push origin master, sử dụng:

git push git@github.com:my_user_name/my_repo.git master
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.