Làm cách nào để đẩy GitHub theo tên người dùng khác?


154

Một người bạn và bản thân tôi đang chia sẻ máy tính của tôi. Tôi đã thực hiện các thao tác đẩy lên GitHub bằng cách sử dụng shell git bash trên Windows 7. Bây giờ chúng tôi đang ở một dự án khác trên máy tính đó và tôi cần cô ấy đẩy vào tài khoản của mình. Nhưng nó vẫn cố gắng sử dụng tên người dùng của tôi và nói rằng tôi không có quyền truy cập vào kho lưu trữ của cô ấy:

$ git push her_github_repository our_branch
ERROR: Permission to her_username/repository.git denied to my_username.
fatal: The remote end hung up unexpectedly

Điều này có giúp được không.github.com/articles/setting-your-email-in-git (sử dụng git config --global user.name her_username) trước khi đẩy
Prinzhorn

Tôi thấy bạn đã chuyển sang các url HTTPS vì vậy github luôn nhắc về thông tin đăng nhập. Chỉ cần nhớ rằng các xác nhận vẫn sẽ được ghi lại như được thực hiện bởi người dùng trong git config user.name và git config user.email bất kể ai thực sự thực hiện việc đẩy. ps Tôi không nghĩ có một lịch sử của những người đã đẩy những gì.
Jorge Orpinel

28
git config --local credential.helper ""có thể làm thủ thuật
SOFe

Tôi không thể làm theo bất kỳ giải pháp nào được đưa ra ở đây trên hệ thống cửa sổ của mình. Các bước được đưa ra trong câu trả lời này cuối cùng đã hoạt động stackoverflow.com/a/153829503531903
Sandeepan Nath

@SOFe đó là những gì tôi đang tìm kiếm! Liệu lệnh này có hiệu quả xóa sạch một số thông tin lưu trữ?
CCJ

Câu trả lời:


92

Nếu bạn sử dụng người dùng windows khác nhau, cài đặt khóa SSH và git của bạn sẽ độc lập.

Nếu đây không phải là một tùy chọn cho bạn, thì bạn của bạn nên thêm khóa SSH của bạn vào tài khoản Github của cô ấy.

Mặc dù, giải pháp trước đây sẽ giữ cho bạn tự đẩy mình, nhưng nó sẽ cho phép bạn đẩy vào repo của cô ấy. Nếu bạn không muốn điều này và làm việc trong các thư mục khác nhau trên cùng một máy tính, bạn có thể thiết lập tên người dùng và gửi email cục bộ trong một thư mục bằng git bằng cách xóa -gcờ của lệnh config:

git config user.name her_username
git config user.email her_email

Ngoài ra, nếu bạn đẩy qua httpsgiao thức, Github sẽ nhắc tên người dùng / mật khẩu mỗi lần (trừ khi bạn sử dụng trình quản lý mật khẩu).


6
Theo tôi nhớ, các khóa SSH phải là duy nhất trên Github, bạn không thể có cùng một khóa được gắn vào nhiều tài khoản
Gareth

@Gareth Có thể, nhưng bạn có thể đặt nhiều khóa SSH cho cùng một người dùng trong windows (và ở mọi nơi tôi biết).
Simon Boudrias

không thể có hai chìa khóa, xem câu trả lời của tôi dưới đây.
chovy

1
Đối với mọi dự án:git config --global user.name "Mona Lisa"
w3spi

235

Điều này làm việc cho tôi, nó sẽ nhắc tên người dùng và mật khẩu

git config --local credential.helper ""
git push origin master

1
Cảm ơn, nó hoạt động với tôi, tôi đã sử dụng bitbucket và tôi đã định cấu hình tên người dùng của mình, nhưng điều này đã giải quyết việc di chuyển sang aws code-commit
Alejandro Ruiz

Tôi đã helper = cache --timeout=999999thiết lập của tôi .gitignorevà điều này làm việc. Nhưng có cách nào để thiết lập lại mà không thay đổi cấu hình cục bộ không?
Ciro Santilli 郝海东 冠状 病 事件

Thật đáng kinh ngạc!
hargun3045

Đây là những gì tôi đang tìm kiếm !!!
aagjalpankaj

1
Giải thích rõ hơn về những gì nó làm ở đây: Nó cấu hình repo cục bộ của bạn để bỏ qua cấu hình (có thể trên toàn cầu) credential.helper, ví dụ: cửa hàng thông tin Windows. Điều này cũng có nghĩa là nó yêu cầu tên người dùng / mật khẩu mỗi khi cần, vì không có gì được cấu hình, vì vậy có lẽ bạn cũng có thể định cấu hình credential.helperbộ đệm để thay thế (xem câu trả lời @Ciro Santilli's) hoặc sử dụng câu trả lời khác tại đây.
rugk

50

Bạn có thể đẩy bằng cách sử dụng tài khoản khác nhau. Ví dụ: nếu tài khoản của bạn là A được lưu trữ trong .gitconfig và bạn muốn sử dụng tài khoản B là chủ sở hữu của repo bạn muốn đẩy.

Tài khoản B : B_user_name, B_password
Ví dụ về liên kết SSH: https://github.com/B_user_name/project.git

Đẩy với tài khoản B là:

$ git push https://'B_user_name':'B_password'@github.com/B_user_name/project.git

Để xem tài khoản trong .gitconfig

  1. $git config --global --list
  2. $git config --global -e (để thay đổi tài khoản cũng)

Wow đây là câu trả lời !! Tôi đã thiết lập user.name, user.emailtrong cấu hình cục bộ, tôi đã nhân bản với tên người dùng và không hoạt động; bây giờ câu trả lời cuối cùng hoạt động mà không cần chạm vào móc khóa / bất cứ điều gì ... trong Git 2.9.0 in Windows. "Cuối cùng nhưng không kém phần quan trọng" .. đây là những gì nó được gọi. Cảm ơn bạn. Câu trả lời này xứng đáng upvote hơn.
WesternGun

3
Tác dụng phụ duy nhất là mật khẩu / tên người dùng của bạn được ghi lại trong lịch sử bash .. Nhưng nó hoạt động với tôi.
WesternGun

Cảm ơn bạn vì điều này, đây chính xác là những gì tôi muốn làm. Điều này đẩy đến chủ, mặc dù. Làm thế nào tôi sẽ đẩy đến một chi nhánh ngoài chủ?
Steven Anderson

1
@WesternGun Không cung cấp mật khẩu trong url nếu bạn muốn ngăn nó được ghi lại trong lịch sử bash. Sử dụng https://'B_user_name'@github.com/B_user_name/project.git. Điều này sẽ nhắc nhập mật khẩu của B_user_name.
Subleseeker

24

Tôi thiết lập bí danh ssh bằng cách sử dụng tùy chỉnh IdentityFilevà viết lại nguồn gốc để sử dụng me-githubtên máy chủ tùy chỉnh của mình .

#when prompted enter `id_rsa_user1` as filename
ssh-keygen -t rsa

# ~/.ssh/config
Host user1-github
HostName github.com
Port 22
User git
IdentityFile ~/.ssh/id_rsa_user1

#check original remote origin url
git remote -v
origin git@github.com:user1/my-repo.git

#change it to use your custom `user1-github` hostname
git remote rm origin
git remote add origin git@user1-github:user1/my-repo.git

5
Thay vì xóa sau đó thêm, chúng tôi có thể thay đổi url từ xa bằng cách: git remote set-url origin git@user1-github:user1/my-repo.git 😊
Ninh Phạm

18

Nếu bạn sử dụng URL SSH ( git@github.com:username/projectname.git) thay vì URL HTTPS, bạn có thể tạm thời chỉ định một khóa SSH khác bằng $GIT_SSH_COMMANDbiến môi trường:

$ GIT_SSH_COMMAND="ssh -i different_private_key" git push

Theo như tôi có thể nói, với các URL SSH, GitHub không quan tâm đến tên người dùng, chỉ về các khóa: nếu tài khoản người dùng có quyền truy cập vào kho lưu trữ và tài khoản đó có khóa SSH (xem trang Khóa SSH trong tài khoản cài đặt), sau đó nếu bạn sử dụng khóa SSH đó để đẩy vào kho lưu trữ đó, việc đẩy sẽ được coi là đến từ người dùng đó.


1
này không làm việc cho tôi, điều thú vị, thay đổi user.nameuser.emailtrong git configsẽ thay đổi tài khoản mà một cam kết có liên quan đến
Kevin Triệu

Nó làm việc cho tôi. Chỉ cần một bình luận nhỏ để làm cho câu trả lời rõ ràng hơn. "Dif_private_key" là một tệp trên hostA chứa khóa riêng của userB thay mặt chúng tôi muốn thực hiện "git đẩy" trên hostA là userA. Bạn phải tạo tệp này trên hostA (ví dụ: ~ / .ssh / id_rsa_userB) và đặt ở đó nội dung của tệp ~ / .ssh / id_rsa từ hostB nơi userB tồn tại. Nó thậm chí không quan trọng nếu userB tồn tại hoặc không tồn tại trên hostA.
Alexander Samoylov

15

Nếu sau khi chạy, git pushGit yêu cầu nhập mật khẩu user, nhưng bạn new_usermuốn sử dụng, bạn có thể muốn sử dụng git config remote.origin.url:

$ git push
user@my.host.com:either/branch/or/path's password:

Tại thời điểm này sử dụng ^Cđể thoát git pushvà sử dụng sau để đẩy như new_user.

$ git config remote.origin.url
user@my.host.com:either/branch/or/path

$ git config remote.origin.url new_user@my.host.com:either/branch/or/path

$ git push
new_user@my.host.com:either/branch/or/path's password:

Xin chào, tôi đã thử giải pháp này để đẩy vào stlassian. Tôi gặp lỗi "<URL> / thông tin / refs không tìm thấy: bạn đã chạy git update-server-information trên máy chủ chưa?" Tôi không thể nghĩ rằng tôi có thể chạy các lệnh trên Stash. Bạn có một ý tưởng làm thế nào để giải quyết điều này? Cảm ơn!
Zsolt Szilagyi 16/07/2015

Đối với GitHub, điều này sẽ giống như:git config remote.origin.url https://different_user@github.com/different_user/repo.git
NumeSanguis

13

Thật đơn giản trong khi nhân bản, vui lòng lấy URL git với tên người dùng của bạn. Khi cam kết nó sẽ hỏi mật khẩu người dùng mới của bạn.

Ví dụ:

git clone https: //username@github.com/username/reponame.git

git clone https: //username@bitbucket.org/username/reponame.git


4
Câu trả lời này nên có nhiều upvote ít nhất. Nếu bạn không làm như @Krishna Kavoor nói, bạn sẽ luôn gặp vấn đề, bởi vì mặc dù trên toàn cầu bạn có tên người dùng1 và tại địa phương bạn có tên người dùng2, git sẽ cố gắng sử dụng tên toàn cầu.
Markon

Nó không hoạt động. Tôi đã sử dụng nó và nó nói : fatal: repo not found.
WesternGun

1
Nó luôn hoạt động Vì tôi có 3 dự án khác nhau từ 3 khách hàng khác nhau. Nó hoạt động như một phép màu. Vui lòng kiểm tra đường dẫn repo của bạn là chính xác.
KRnamoorthy Acharya

7

nếu đây là vấn đề của bạn

remote: Permission to username1/repo.git denied to username2.
fatal: unable to access 'https://github.com/username1/repo.git/':
The requested URL returned error: 403

Ngoài việc thay đổi tên người dùng và email từ thiết bị đầu cuối bằng git config:

$ git config --global user.name "Bob"
$ git config --global user.email "bob@example.com"

bạn sẽ cần xóa thông tin ủy quyền khỏi Keychain. Giải pháp này khiến tôi mất vài giờ để tìm hiểu. Tôi thấy rằng tôi cũng có chứng chỉ trong Keychain của mình.

Mở truy cập Keychain, nhấp vào Tất cả các mục và tìm kiếm git. Xóa tất cả móc khóa


Windows 7 đối tác với Keychain là gì?
Thomas Eyde

Không chắc chắn, nhưng sẽ tìm ra
Muyide Ibukun

Tôi đoán tôi cũng bị kẹt ở đây. Bạn đã tìm ra?
Sandeepan Nath

Không, cuối cùng đã không tìm ra, nhưng tôi đoán nó không quá khó
Muyide Ibukun 23/12/17

1
cảm ơn vì đã gợi ý về việc xóa thông tin ủy quyền khỏi Keychain
Luja Shrestha

7

Tôi đã sử dụng một máy để đẩy mã đến hai tài khoản GitHub khác nhau với tên người dùng khác nhau. Giả sử bạn đã thiết lập một tài khoản và muốn thêm một tài khoản mới:

  1. Tạo khóa SSH mới ssh-keygen -t rsa -C "myaddress@example.com"
  2. Lưu nó, nhưng nhớ đừng ghi đè lên cái tồn tại id_rsa. Đặt tên khác, vdid_rsa_another
  3. Sao chép nội dung của khóa vào tài khoản GitHub của bạn:

Cài đặt -> Khóa SSH và GPG -> Khóa SSH mới -> Cung cấp nhãn và dán khóa -> Thêm khóa SSH

  1. Thêm khóa vào tác nhân ssh: ssh-add ~/.ssh/id_rsa_another
  2. Thiết lập máy chủ GitHub: Tạo tệp cấu hình touch ~/.ssh/configvà chỉnh sửa tệp bằng cách cung cấp cấu hình cho tài khoản của bạn:
#first account
Host github.com-first
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa

#another account
Host github.com-another
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_another

Bây giờ bạn sẽ có thể đẩy từ các tài khoản khác nhau tùy thuộc vào khóa nào bạn thêm vào tác nhân ssh, tức là sử dụng tài khoản đầu tiên của bạn, làm ssh-add ~/.ssh/id_rsa.

Bạn cũng có thể muốn thay đổi email người dùng của mình:

git config --global user.email "myaddress@example.com"

hoặc xóa các khóa ssh trong trường hợp lỗi cấp phép khi nhập mã vào một trong các tài khoản:

ssh-add -D


1
Có, tôi đã đặt thành nhiều tài khoản. Nhưng làm thế nào tôi có thể đẩy với tài khoản đầu tiên. Bạn có thể vui lòng chia sẻ lệnh?
mật mã

Bạn có ý nghĩa gì bởi "làm thế nào tôi có thể đẩy"? Không git pushhoạt động? Bạn sẽ có thể đẩy sau khi thêm chìa khóa của mình
Tomasz Bartkowiak

Bạn nên đặt người dùng cho mỗi dự án repo $ git config user.email
jasmintmp

6

Chuyển đến Trình quản lý thông tin xác thực Chuyển đến Windows Credentials Xóa các mục trong Thông tin chung chung Thử kết nối lại.


Cảm ơn. Đường dẫn là Control Panel\All Control Panel Items\Credential Manager-> Windows Credentials.
Saheed

4

Như đã đề cập trước đó, bạn có thể sử dụng

git config user.name her_username
git config user.email her_email

để tự đặt tên người dùng và email cho một repo, nhưng bạn phải thêm lệnh này:

git commit --amend --reset-author

nếu bạn đã cố gắng đẩy trước khi thay đổi. Nếu không, những thay đổi không xuất hiện trong tập tin cấu hình.


Đây không phải là sự thật. Các --reset-author(với --...) sẽ đặt mới nhất cấu hình tên / email trên cam kết cuối cùng, và cũng là dấu thời gian mới nhất. Nó không ảnh hưởng đến những thay đổi trong tập tin cấu hình.
Ramon Snir

3

Bạn có thể thêm một URL từ xa mới cho tên người dùng khác bằng cách sử dụng git remote add origin-username https://username@github.expedia.biz/repository_name.git

Sau này, nếu bạn sẽ sử dụng git push -u origin-username master, điều này sẽ nhắc bạn nhập mật khẩu.


2

git config user.name chỉ thay đổi tên tôi cam kết. Tôi vẫn không thể đẩy. Đây là cách tôi giải quyết nó, và tôi nghĩ là một cách dễ dàng với tôi.

  1. Tạo khóa SSH dưới tên người dùng bạn muốn ấn trên máy tính, bạn sẽ sử dụng https://help.github.com/articles/connecting-to-github-with-ssh/

  2. Thêm khóa này vào tài khoản người dùng github mà bạn muốn đẩy tới https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/

  3. Chọn sao chép bằng SSH

Bạn có thể đẩy người dùng này vào repo đó ngay bây giờ.


2

Nếu dưới Windows và người dùng Git cho Windows và managerđể quản lý thông tin đăng nhập (còn gọi là Git-Credential-Manager-for-Windows Liên kết ) thì vấn đề là không có cách nào dễ dàng để chuyển đổi giữa những người dùng khi đẩy sang GitHub httpsbằng cách sử dụngOAuth mã thông báo.

Lý do là mã thông báo được lưu trữ dưới dạng:

  • Địa chỉ Internet: git:https://github.com
  • Tên tài khoản: Personal Access Token
  • Mật khẩu: OAuth_Token

Các biến thể của URL Internet Addresskhông hoạt động, ví dụ:

  • git:https://username@github.com
  • git:https://github.com/username
  • ...

Giải pháp: không gian tên . Điều này được tìm thấy trong các chi tiết cho cấu hình của Git-Credential-Manager-for-Windows:

Trích dẫn từ nó:

không gian tên

Đặt không gian tên cho thông tin lưu trữ.

Theo mặc định, GCM sử dụng không gian tên 'git' cho tất cả các thông tin được lưu trữ, việc đặt giá trị cấu hình này cho phép kiểm soát không gian tên được sử dụng trên toàn cầu hoặc trên mỗi máy chủ.

git config --global credential.namespace name

Bây giờ, lưu trữ thông tin đăng nhập của bạn trong Trình quản lý thông tin Windows dưới dạng:

  • Địa chỉ Internet: git.username:https://github.com
  • Tên tài khoản: Personal Access Token
  • Mật khẩu: OAuth_Token

Lưu ý rằng chúng tôi đã thay đổi: git-> git.username(nơi bạn thay đổi usernametên người dùng thực tế hoặc vì lợi ích của nó, thành bất cứ điều gì bạn có thể muốn làm định danh duy nhất)

Bây giờ, bên trong kho lưu trữ mà bạn muốn sử dụng mục cụ thể, hãy thực hiện:

git config credential.namespace git.username

(Một lần nữa ... thay thế usernamebằng giá trị mong muốn của bạn)

Di .git/configchúc của bạn bây giờ có chứa:

[credential]
    namespace = git.username

Et voilá! Thông tin xác thực sẽ được lấy từ Cửa hàng Thông tin Windows.

Điều này, tất nhiên, không thay đổi người dùng / e-mail nào đang đẩy. Cho rằng bạn phải cấu hình thông thường user.nameuser.email


Cảm ơn bạn. Điều này làm việc tốt nhất cho tôi (Windows 10). Không xóa tạm thời các tài khoản người dùng git khác trong Windows Credentials, không có "hack". Tôi có một người dùng git toàn cầu / máy chủ cho tất cả các kho lưu trữ. Ngoại trừ chỉ một trong số họ yêu cầu thông tin khác nhau. Nếu điều đó cũng phù hợp với môi trường của bạn, chỉ cần để lại mọi thứ như trong thông tin đăng nhập của Windows, hãy truy cập kho lưu trữ "đặc biệt" của bạn và nhập git config credential.namespace git.usernamenhư đã đề cập (thay thế tên người dùng). Nếu bạn đẩy lần sau, git sẽ hỏi bạn thông tin đăng nhập mới cho tên người dùng.
ford04

2

Tôi không thể tìm ra cách để có danh tính github thứ 2 trên một máy (không có câu trả lời nào trong số này cho tôi), nhưng tôi đã tìm ra cách để có thể tự đẩy vào nhiều tài khoản github khác nhau.

Đẩy cùng tên người dùng, nhưng đến các tài khoản github khác nhau

  1. Thiết lập khóa SSH thứ 2 ( như vậy ) cho tài khoản github thứ 2 của bạn

  2. Thay đổi giữa các tài khoản như vậy:

Đẩy bằng tài khoản github thứ 2 mới của tôi

ssh-add -D
ssh-add ~/.ssh/ssh_key_for_my_2nd_account
git push

Đẩy bằng tài khoản chính của tôi

ssh-add -D
ssh-add ~/.ssh/id_rsa   
git push


0

Userid nơi cam kết xảy ra được lưu trữ trong tệp cấu hình.

đi đến đầu kho vi .git / config

thay đổi dòng url được liệt kê sau "[nguồn gốc" từ xa "] để có userid phù hợp


0

Nếu bạn sử dụng ssh và nhận

Quyền đối với some_username / repository.git bị từ chối đối với Alice_username

trong khi bạn không muốn sử dụng Alice_username, hãy đảm bảo Alice_username không được thêm khóa ssh của máy tính vào tài khoản github của nó.

Tôi đã xóa khóa ssh của mình khỏi tài khoản github của alice và việc đẩy đã hoạt động.

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.