Git đẩy đến kho lưu trữ GitHub từ xa do nhầm người dùng


82

Tôi có một tài khoản GitHub công việc và một tài khoản cá nhân. Đầu tiên, tôi sử dụng tài khoản cá nhân cho các dự án thử nghiệm, sau đó tôi chuyển sang và tạo một kho lưu trữ với tài khoản kia trên cùng một máy tính.

Bây giờ tôi muốn tạo lại một kho lưu trữ mới trên tài khoản cá nhân của mình, tôi đã thay đổi toàn cục và cục bộ user.name, đồng thời tạo một cặp khóa ssh mới, được nhập vào trang thiết lập GitHub. Sau đó, tôi thiết lập thư mục

git init
git remote add origin <url>
git push origin

nhưng điều đó bây giờ cho tôi biết

LỖI: Quyền đối với người dùng cá nhân / newrepo.git bị từ chối

Tôi không biết tài khoản kia được kết nối với tài khoản này như thế nào. .git/configkhông hiển thị workusernamenhững thứ liên quan.

Nếu bạn đang sử dụng Windows 10, hãy dành thời gian đọc câu trả lời của Rajan.


1
Đối với Windows 10, hãy trả lời bên dưới. Xóa thông tin đăng nhập khỏi trình quản lý thông tin xác thực. Lãng phí 2 giờ thời gian.
xenteros

@xenteros Vui lòng đăng bài này như một câu trả lời. Tôi đã mất 1h và bạn đã tiết kiệm cho tôi 1h nữa.
lexicore

Câu trả lời:


76

điều này nghe rất giống với công việc hiện tại của tôi được thiết lập. có vẻ như bạn đã thiết lập tệp riêng ssh-keysnên bạn cũng cần tạo ~/.ssh/configtệp và điền vào tệp đó với thông tin tương tự như sau:

Host work.github.com
    HostName github.com
    User WORK_GITHUB_USERNAME
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_work_rsa
    IdentitiesOnly yes

Host personal.github.com
    HostName github.com
    User PERSONAL_GITHUB_USERNAME 
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_personal_rsa
    IdentitiesOnly yes

Mỗi tài sản nghe có vẻ khá tự giải thích nhưng IdentitiesOnlymột. Tôi sẽ không cố gắng giải thích điều đó để làm gì, nhưng đó là trong thiết lập hiện tại của tôi và hoạt động tốt.

Cũng cần lưu ý rằng Host URLnó chỉ là một con trỏ để lấy cài đặt người dùng chính xác và không có bất kỳ ảnh hưởng nào đến việc đưa các tệp chính xác đến HostNameurl mục tiêu của bạn .

Bây giờ bạn chỉ cần đảm bảo url của bạn origin(hoặc bất kỳ remotenói chung) nào khớp với Hosturl chính xác trong các kho lưu trữ tương ứng của bạn tùy thuộc vào tên người dùng của bạn. Nếu bạn đã có các kho lưu trữ cá nhân hiện có, bạn có thể chỉnh sửa .git/configtệp của kho lưu trữ đó trong trình soạn thảo văn bản của mình:

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

hoặc làm điều đó thông qua dòng lệnh:

git remote set-url origin git@personal.github.com:PERSONAL_GITHUB_USERNAME/project.git

Tương tự như vậy đối với công việc của bạn:

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

hoặc một lần nữa, thông qua dòng lệnh:

git remote set-url origin git@work.github.com:your_work_organization/project.git

Tất nhiên, bạn luôn có thể đặt một trong Hostcác url trong ~/.ssh/configtệp của mình là

Host github.com

Tôi chỉ sử dụng work.github.comđể xem các mối quan hệ cấu hình dễ dàng hơn.

Khi tất cả các điều này đã được thiết lập, bạn sẽ có thể đẩy đến từng điều khiển từ xa tương ứng.

BIÊN TẬP

Một điều cần lưu ý mà tôi vừa phát hiện ra là nếu bạn đã từng đặt giá trị cấu hình git chung cho giá trị của mình user.email(và tôi đoán user.namecũng sẽ gửi một giá trị khác), git sẽ hiển thị cam kết của bạn với tư cách là người dùng email đó. Để giải quyết vấn đề này, bạn có thể ghi đè cài đặt cấu hình git chung trong kho lưu trữ cục bộ của mình:

$ git config user.name "John Doe"
$ git config user.email johndoe@example.com

Điều này bây giờ sẽ gửi cam kết với tư cách là người dùng chính xác cho repo đó.


3
Hoạt động như một sự quyến rũ. Cảm ơn bạn!
NorthBridge

1
Trang này giải thích đầy đủ hơn về tệp cấu hình ssh cho những ai quan tâm.
Phil

3
Chắc chắn là câu trả lời hữu ích nhất. Cảm ơn nhiều.
limp_chimp

Xuất sắc! Cám ơn rất nhiều!
Fydo

1
Chìa khóa mà tôi đã thiếu là chỉ định máy chủ ssh trong .git / config - Cảm ơn rất nhiều!
xdotcommer

45

Đi tới Bảng điều khiển> Tài khoản người dùng> Trình quản lý thông tin đăng nhập> Thông tin đăng nhập chung

xóa thông tin đăng nhập git. Sau đó chạy git push. Thao tác này sẽ nhắc yêu cầu thông tin xác thực git. Nhập thông tin đăng nhập chính xác của bạn.


3
Điều này đã giải quyết sự cố của tôi khi chạy Git Bash trong Windows10. Cảm ơn @ Rajan-Patil
suspicious_williams

Đối với những người không có các cửa sổ giao diện bằng tiếng Anh, bạn có thể đạt được quản lý chứng chỉ bằng cách gõ control /name Microsoft.CredentialManagervào dòng lệnh
bgusach

kỳ lạ, nhưng nó hoạt động tốt chỉ khi tôi khởi động Git Bash (như đã đề cập ở trên) nhưng nếu tôi tiếp tục sử dụng cùng một thiết bị đầu cuối, tôi đã bắt đầu git pushvới lỗi - nó liên tục gặp lỗi giống nhau, ngay cả sau khi thiết bị đầu cuối khởi động lại. Nhưng cảm ơn bạn, dù sao - nó đã cứu tôi rất nhiều thời gian ở cuối
Kostyantyn Didenko

Đây chắc chắn là câu trả lời tốt nhất mà tôi đã xem qua. Phần còn lại khá phức tạp nhưng điều này đơn giản và chính xác.
claudekennilol

Điều này hoạt động MỘT LẦN. Sau khi bạn thêm lại các tài khoản, vấn đề tương tự vẫn tiếp tục xảy ra.
Megakoresh

37

Bạn cũng có thể chuyển sang https thay vì ssh. Nếu bạn sử dụng https, nó sẽ tôn trọng cài đặt .git / config. Vì vậy, trong .git / config, hãy thay đổi:

url = git@github.com:USER/PROJECT.git

đến

url = https://USER@github.com/USER/PROJECT.git

(các giá trị này nằm trên trang dự án git, nhấp vào nút SSHHTTPđể tìm các giá trị mới);


2
+1! Đây là một giải pháp thực sự tốt để làm một lần push từ máy cho mượn vv mà bạn không muốn cài đặt khóa riêng, vv
lambshaanxy

1
tôi nghĩ rằng vấn đề duy nhất với việc sử dụng httpslà bạn phải gõ vào user / pass mỗi khi bạn làm một push, trừ khi nếu có một số git config tôi không nhận thức được
hellatan

Tôi biết điều này là siêu cũ, nhưng XIN CẢM ƠN. Máy của tôi không được thiết lập cho ssh, nhưng nó vẫn đang cố gắng đẩy vào tài khoản github công việc của tôi thay vì cá nhân của tôi. Đã sử dụng điều này trong .git / config trong thư mục dự án của tôi và hoạt động tuyệt vời. Yay! Ủng hộ cho bạn.
Sady

2
phải nhận thức được bạn có thể làm git push https://username:pass@github.com/user/repo.gitquá ... nếu bạn OK với passtrong lịch sử vỏ của bạn
Plato

Đây là giải pháp tốt nhất. Cảm ơn bạn!
codemicky

33

github xác định bạn bằng khóa ssh mà nó thấy, không phải bằng bất kỳ cài đặt nào từ git.

Do đó, bạn cần đảm bảo rằng khóa ssh của tài khoản công việc không có trong khóa của bạn khi bạn cố gắng đẩy làm tài khoản cá nhân của mình và ngược lại. Sử dụng ssh-add -lđể xác định khóa nào có trong chùm chìa khóa của bạn và ssh-add -d keyfileđể xóa khóa khỏi chùm chìa khóa của bạn.

Ngoài ra, bạn có thể cần phải kiểm tra ~/.ssh/configxem bạn đã định cấu hình nó để hiển thị các khóa ssh nhất định cho github hay chưa. Cuối cùng, tôi không biết github xử lý như thế nào với hai tài khoản có cùng khóa công khai ssh, vì vậy hãy đảm bảo rằng bạn không làm điều đó.


3
Bạn cũng có thể, nếu cần, sử dụng GIT_SSHbiến môi trường để yêu cầu git sử dụng một lệnh khác cho ssh; đặc biệt, bạn có thể sử dụng một khóa cụ thể. Xem trang git man chính hoặc có thể câu hỏi này .
Cascabel

Trên hệ thống của tôi (OSX 10.5), lệnh xóa khóa khỏi keyring làssh-add -d keyfile
Motin

Cảm ơn @Motin, đó thực sự là những gì tôi muốn nói. Đã chỉnh sửa.
Walter Mundt

12

Tôi đã gặp vấn đề tương tự gần đây vì tôi đã tạo một tài khoản github mới. Tôi đã thử các câu trả lời ở trên nhưng không giúp được gì. Sau đó, tôi thấy một bài đăng ở đâu đó về việc xóa github khỏi Keychain Access (chỉ khi bạn đang sử dụng mac ). Khi tôi git push, nó sẽ yêu cầu tên người dùng và mật khẩu, và nó đã hoạt động!


@Carpetsmoker Có vẻ như OP đang cung cấp một giải pháp dành riêng cho Mac.
Zev Spitz

1
Vui lòng cố gắng tìm bài đăng gốc và thêm dưới dạng liên kết.
Zev Spitz


11

Tôi đã từng gặp vấn đề tương tự. Hóa ra tôi có hai tài khoản trên GitHub sử dụng cùng một khóa SSH và GitHub được mặc định sử dụng sai tài khoản không có quyền đối với repo mà tôi đang theo dõi. Tôi đã xóa khóa SSH khỏi tài khoản mà tôi không sử dụng, tất cả đều hoạt động như mong đợi.

Bạn có thể kiểm tra tài khoản GitHub đang tự xác thực bằng:

ssh -T git@github.com

Đối với tôi, điều này ban đầu hiển thị tên người dùng sai, nhưng sau khi xóa khóa SSH trùng lặp khỏi tài khoản đó, sau đó nó hiển thị tên người dùng chính xác và thao tác kéo và đẩy tới repo của tôi hoạt động tốt.


8

Tôi biết điều này có thể hơi muộn, nhưng tôi đã bị mắc kẹt với điều này khá lâu và cuối cùng đã sửa nó như thế này:

ảnh chụp màn hình ví dụ

  • Truy cập chuỗi khóa (osX)

  • tìm kiếm git (đảm bảo bạn đã chọn Tất cả các mục)

  • Ở đây bạn sẽ tìm thấy thông tin xác thực thủ phạm. Xóa chúng.

Hi vọng điêu nay co ich!


Đây là câu trả lời duy nhất giúp tôi!
Wilder Pereira

Câu trả lời này đã giúp tôi khắc phục sự cố trong mac.
Javascript Hupp Technologies,

6

Đây là một cách để làm điều này: bạn có thể sử dụng các cấu hình ssh khác nhau cho các tài khoản ssh khác nhau.

Cập nhật vào ngày 22 tháng 2:

Kiểm tra liên kết này: https://gist.github.com/2351996


Gist được liên kết và nhận xét đầu tiên trên trang Gist hoạt động hoàn hảo đối với tôi. Tôi nghĩ điều này tốt hơn câu trả lời của Walter Mundt vì bạn có thể để lại nhiều chìa khóa trên bộ chìa khóa của mình và mọi thứ 'chỉ hoạt động'.
keybits

3

Nếu việc thay đổi khóa SSH được liên kết với tài khoản không hoạt động, hãy thay đổi email được liên kết với tài khoản.

Đi tới Github> Cài đặt tài khoản> Email và xác minh địa chỉ email bạn đang sử dụng để cam kết khớp với email trên tài khoản.

Để xem địa chỉ email bạn đang sử dụng để thực hiện, hãy chạy lệnh sau: git config --global user.email. Nếu bạn cần thay đổi địa chỉ email mà bạn đang sử dụng để cam kết, hãy chạy git config --global user.email "your_email@youremail.com".


2

Tôi gặp vấn đề tương tự. Dưới đây là những gì xảy ra trong trường hợp của tôi:

Trước đây tôi đã thực hiện git để không hỏi thông tin đăng nhập của mình mỗi khi tôi nói chuyện với kho lưu trữ từ xa bằng cách này: git config --global credential.helper wincred

Tôi đã giải quyết sự cố bằng cách chạy cùng một lệnh với "không" thay thế "wincred" git config --global credential.helper none

Sau đó, git hỏi lại tên người dùng / thẻ của tôi và mọi thứ diễn ra tốt đẹp


1

Tôi cũng gặp sự cố này nhưng không có giải pháp nào khác phù hợp với tôi. Hóa ra là vì công việc, chúng tôi đã tạo một .netrctệp có các mục nhập để xác thực github. Các gitlệnh luôn sử dụng .netrc, trong đó có tên người dùng cũ của tôi và mật khẩu. Tôi đã phải chỉnh sửa các mục nhập trong .netrctệp của mình để sử dụng tên người dùng và mật khẩu mới.


1

Tôi đã tìm thấy một giải pháp tạm thời, trong đó lần đầu tiên chạy killall ssh-agentsau đó thêm các khóa ssh được tạo cho tài khoản bạn cần sử dụngssh-add ~/.ssh/id_4shameer

Đây là một cách mà chúng tôi có thể làm việc trên nhiều tài khoản github khi chúng tôi gặp lỗi loại ERROR: Permission to user/repo-git.git denied to username.


1

Chưa bao giờ gặp bất kỳ sự cố nào với git cho đến khi làm việc, gần đây họ đã kết nối macbook của chúng tôi với Active Directory và thêm một vài tài khoản quản trị vào máy của tôi. Tuy nhiên, sau đó git sẽ hoạt động tốt cho đến khi tôi khóa màn hình và quay lại. Sau đó, tôi sẽ gặp một lỗi mơ hồ tương tự như

No user exists for uid 1927040837
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Tôi chỉ có một khóa ssh trên máy cụ thể này cho người dùng của tôi và đang sử dụng zsh trong nhiệm kỳ của tôi. Email và tên của người dùng đã chính xác nên đó không phải là vấn đề. Ồ, việc khởi động lại sau mỗi lần tôi khóa máy là vô ích. Giải pháp cho tôi là chỉnh sửa.zshrc tệp và bỏ ghi chú dòng xuất khóa ssh (điều mà tôi chưa bao giờ phải làm trước đây và đã sử dụng zsh trong nhiều năm).

Dòng sẽ trông giống như sau:

# ssh
export SSH_KEY_PATH="~/.ssh/<your_rsa_id>"

Khi bạn làm điều này, chỉ cần chạy một resetthiết bị đầu cuối trong và mọi thứ hoạt động tốt.

Tôi mong điều này giúp được người nào khác.


0

Tôi muốn nói thêm - Nếu bạn đang làm việc trên tài khoản của người dùng khác, hãy đảm bảo rằng bạn tự thêm mình vào khu vực cộng tác viên trong cài đặt kho.


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.