GitHub'a farklı bir kullanıcı adı altında nasıl gönderebilirim?


171

Bir arkadaşım ve ben bilgisayarımı paylaşıyoruz. Windows 7'de git bash kabuğunu kullanarak GitHub'a göndermeler yaptım. Şimdi o bilgisayarda farklı bir projedeyiz ve onun hesabını zorlaması gerekiyor. Ancak kullanıcı adımı kullanmaya çalışıyor ve deposuna erişimim olmadığını söylüyor:

$ 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

Bu, yardım etmeden önce help.github.com/articles/setting-your-email-in-git'e (kullanın git config --global user.name her_username) yardımcı oluyor mu
Prinzhorn

HTTPS URL'lerine geçiş yaptığınızı görüyorum, bu yüzden github her zaman kimlik bilgilerini ister. Sadece şunu unutmayın, kaydetme işlemlerinin, gerçekte kimin ittiğine bakılmaksızın, kullanıcı tarafından git config user.name ve git config user.email'de olduğu gibi kaydedilecektir. ps Kimin neyi ittiğine dair bir tarih olduğunu sanmıyorum.
Jorge Orpinel

33
git config --local credential.helper ""hile yapabilir.
SOFe

Burada verilen çözümlerin hiçbirini Windows sistemimde takip edemedim. Bu cevapta verilen adımlar nihayet işe yaradı stackoverflow.com/a/15382950/351903
Sandeepan Nath

@SOFe aradığım buydu! Bu komut, önbelleğe alınmış bazı kimlik bilgilerini etkili bir şekilde siliyor mu?
CCJ

Yanıtlar:


99

Farklı bir Windows kullanıcısı kullanıyorsanız, SSH anahtarınız ve git ayarlarınız bağımsız olacaktır.

Bu sizin için bir seçenek değilse, arkadaşınız SSH anahtarınızı Github hesabına eklemelidir.

Bununla birlikte, önceki çözüm sizi kendiniz gibi zorlamaya devam edecek, ancak deposuna girmenize izin verecektir. Bunu istemiyor ve aynı bilgisayarda farklı bir klasörde çalışıyorsanız, kullanıcı adı ve e-postayı git ile bir klasörün içinde -gconfig komutunun bayrağını kaldırarak yerel olarak kurabilirsiniz :

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

Alternatif olarak, httpsprotokolü zorlarsanız, Github her seferinde kullanıcı adı / şifre isteyecektir (bir şifre yöneticisi kullanmadığınız sürece).


9
Hatırladığım kadarıyla, SSH anahtarlarının Github'da benzersiz olması gerekiyor, aynı anahtar birden fazla hesaba
eklenemez

@Gareth Belki, ancak pencerelerde (ve bildiğim her yerde) aynı kullanıcı için birden fazla SSH anahtarı ayarlayabilirsiniz.
Simon Boudrias

iki anahtar olamaz, aşağıdaki cevabıma bakın.
chovy

1
Her proje için:git config --global user.name "Mona Lisa"
w3spi

Bu sadece görüntülenen kullanıcı adını değiştirir. Giriş yapılan kullanıcı adını değiştirmez. Diğer yanıtlarda belirtildiği gibi, uzak url'yi değiştirmenin iyi bir yolu vardır: git push https://your_other_username_at_github@github.com/username/provided path.git/buradaki her şey @deponun varsayılan https url'sidir.
cutton Göz

260

Bu benim için çalıştı, kullanıcı adı ve şifre isteyecek

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

1
Teşekkürler, benim için işe yaradı, bitbucket kullandım ve kullanıcı adımı yapılandırdım, ancak bu, aws kod kaydına geçişi çözdü
Alejandro Ruiz

Ben kendimi helper = cache --timeout=999999ayarlamıştım .gitignoreve bu işe yaradı. Ancak yerel bir yapılandırmayı değiştirmeden bunu sıfırlamanın bir yolu var mı?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Bu harika!
hargun3045

1
Burada ne yaptığını daha iyi açıklayın: Yerel credential.helperdeponuzu, yapılandırılmış (büyük olasılıkla küresel olarak) , örneğin Windows kimlik bilgisi deposu, yok sayacak şekilde yapılandırır . Bu aynı zamanda , ihtiyaç duyduğu her seferinde bir kullanıcı adı / parola sorduğu anlamına gelir , çünkü hiçbir şey yapılandırılmamıştır, bu nedenle, credential.helperbunun yerine önbelleği de yapılandırabilirsiniz (bkz @ Ciro Santilli'nin cevabı) veya burada farklı bir cevap kullanabilirsiniz.
rugk

61

Farklı hesap kullanarak itebilirsiniz. Örneğin, hesabınız .gitconfig'de depolanan A ise ve göndermek istediğiniz deponun sahibi olan B hesabını kullanmak istiyorsanız.

B Hesabı : B_user_name, B_password
SSH bağlantısı örneği: https://github.com/B_user_name/project.git

B hesabıyla itme :

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

Hesabı .gitconfig biçiminde görmek için

  1. $git config --global --list
  2. $git config --global -e (hesabı da değiştirmek için)

Vay be cevap bu !! Ben belirledik user.name, user.emailyerel config, ben kullanıcı adı ve çalışmıyor ile klonlanmış olması; şimdi son cevap anahtarlığa / her neyse ... içeri dokunmadan çalışıyor Git 2.9.0 in Windows. "sonunda ama en az değil" .. buna denir. Teşekkür ederim. Bu cevap daha fazla oyu hak ediyor.
WesternGun

3
Tek yan etkisi, şifrenizin / kullanıcı adınızın bash geçmişine kaydedilmiş olmasıdır .. Ama benim için çalışıyor.
WesternGun

Bunun için teşekkür ederim, tam da yapmak istediğim şey buydu. Yine de bu ustalaşmayı zorlar. Master dışında bir şubeye nasıl itebilirim?
Steven Anderson

3
@WesternGun Bash geçmişine kaydedilmesini önlemek istiyorsanız, url'de şifre girmeyin. Kullanın https://'B_user_name'@github.com/B_user_name/project.git. Bu, şifresini sormalıdır B_user_name.
subtleseeker

25

Bir özel kullanarak bir ssh takma adı kurdum IdentityFileve özel me-githubana bilgisayar adımı kullanmak için kaynağı yeniden yazdım .

#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
git remote set-url origin git@user1-github:user1/my-repo.git Kaldırıp eklemek yerine, uzak url'yi şu şekilde değiştirebiliriz: 😊
Ninh Pham

19

git@github.com:username/projectname.gitHTTPS URL'si yerine bir SSH URL'si ( ) kullanırsanız, $GIT_SSH_COMMANDortam değişkenini kullanarak geçici olarak farklı bir SSH anahtarı belirtebilirsiniz :

$ GIT_SSH_COMMAND="ssh -i different_private_key" git push

Anlayabildiğim kadarıyla, SSH URL'leri söz konusu olduğunda GitHub kullanıcı adlarını önemsemiyor, yalnızca anahtarlarla ilgileniyor: bir kullanıcı hesabının bir depoya erişimi varsa ve bu hesabın bir SSH anahtarı varsa ( hesaptaki SSH anahtarları sayfasına bakın ) ayarlar), ardından bu SSH anahtarını bu arşive göndermek için kullanırsanız, push o kullanıcıdan geliyormuş gibi değerlendirilecektir.


1
bu benim için işe yaramadı, ilginçtir, user.nameve user.emailiçinde git configdeğiştirmek bir commit ile ilgili olan hesabı değiştirecek
Kevin Zhao

1
Benim için çalıştı. Cevabı daha net hale getirmek için sadece küçük bir yorum. "different_private_key", kullanıcıA olan ana bilgisayarda "git push" yapmak istediğimiz, kullanıcı B'nin özel anahtarını içeren ana bilgisayar A'daki bir dosyadır. Bu dosyayı hostA'da (örneğin ~ / .ssh / id_rsa_userB olarak) oluşturmalı ve buraya userB'nin bulunduğu hostB'den ~ / .ssh / id_rsa dosyasının içeriğini koymalısınız. Kullanıcı B'nin ana bilgisayar A'da var olup olmaması bile önemli değildir.
Alexander Samoylov

15

git pushGit'i çalıştırdıktan sonra için bir şifre soruyor user, ancak siz göndermek new_useristiyorsanız, şunu kullanmak isteyebilirsiniz git config remote.origin.url:

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

Bu noktada ^C, çıkmak için git pushkullanın ve aşağıdaki gibi itmek için kullanın 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:

Merhaba, bu çözümü atlassian zulasına zorlamak için denedim. "<URL> / info / refs bulunamadı: sunucuda git update-server-info çalıştırdınız mı?" Hatasını alıyorum Stash'ta komut çalıştırabileceğimi sanmıyorum. Bunu nasıl çözeceğiniz konusunda bir fikriniz var mı? Teşekkürler!
Zsolt Szilagyi

GitHub için bu şöyle görünür:git config remote.origin.url https://different_user@github.com/different_user/repo.git
NumesSanguis

13

Klonlama sırasında çok basit, lütfen git URL'sini kullanıcı adınızla birlikte alın. İşlemi gerçekleştirirken yeni kullanıcı şifrenizi soracaktır.

Örneğin:

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

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


4
Bu yanıtın en azından daha fazla olumlu oyu olması gerekir. @Krishna Kavoor'un dediği gibi yapmazsanız, her zaman sorun yaşarsınız, çünkü global olarak kullanıcıadı1'e ve yerel olarak kullanıcıadı2'ye sahip olmanıza rağmen, git global adı kullanmaya çalışacaktır.
Markon

İşe yaramıyor. Onu kullandım ve de ki: fatal: repo not found.
WesternGun

1
Her zaman çalışıyor 3 farklı müşteriden 3 farklı projem olduğu için mucize gibi çalışıyor.Lütfen repo yolunuzun doğru olup olmadığını kontrol edin.
Krishnamoorthy Acharya

8

bu senin sorununsa

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

Git config kullanarak kullanıcı adını ve e-postayı terminalden değiştirmeye ek olarak:

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

Yetkilendirme bilgilerini Keychain'den kaldırmanız gerekir. Bu çözümü anlamam birkaç saatimi aldı ve Anahtar Zincirimde de sertifikam olduğunu öğrendim.

Anahtar Zinciri erişimini açın, Tüm Öğeler'e tıklayın ve git'i arayın. Tüm anahtarlığı sil


Anahtar Zinciri'nin Windows 7 karşılığı nedir?
Thomas Eyde

Emin değilim, ancak öğrenecek
Muyide Ibukun

Sanırım ben de burada sıkıştım. Buldun mu?
Sandeepan Nath

Hayır, sonunda
öğrenmedim

1
Yetkilendirme bilgilerini Keychain'den kaldırmayla ilgili öneriniz için teşekkürler
Luja Shrestha

8

Farklı kullanıcı adı ile iki farklı GitHub hesabına kod göndermek için bir makine kullanıyorum. Zaten bir hesap oluşturduğunuzu ve yeni bir hesap eklemek istediğinizi varsayarsak:

  1. Yeni SSH anahtarı oluştur ssh-keygen -t rsa -C "myaddress@example.com"
  2. Kaydedin, ancak mevcut olanı geçersiz kılmamayı unutmayın id_rsa. Ona farklı bir isim verin, örneğinid_rsa_another
  3. Anahtarın içeriğini GitHub hesabınıza kopyalayın:

Ayarlar -> SSH ve GPG anahtarları -> Yeni SSH anahtarı -> Bir etiket verin ve anahtarı yapıştırın -> SSH anahtarı ekleyin

  1. Anahtarı ssh aracısına ekleyin: ssh-add ~/.ssh/id_rsa_another
  2. Bir GitHub ana bilgisayarı touch ~/.ssh/configkurun: Hesaplarınıza yapılandırmalar sağlayarak bir yapılandırma dosyası oluşturun ve dosyayı düzenleyin:
#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

Artık ssh aracısına hangi anahtarı eklediğinize bağlı olarak, yani ilk hesabınızı kullanmak için farklı hesaplardan push yapabilmelisiniz ssh-add ~/.ssh/id_rsa.

Kullanıcı e-postanızı da değiştirmek isteyebilirsiniz:

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

veya hesaplardan birine kod gönderirken izin hatası olması durumunda ssh anahtarlarını temizleyin:

ssh-add -D


1
Evet, zaten birden çok hesap olarak ayarladım. Ama ilk hesapla nasıl itebilirim. Lütfen komutayı paylaşır mısınız?
codemicky

"Nasıl itebilirim" ile neyi kastediyorsunuz? Çalışmıyor mu git push? Anahtarınızı ekledikten sonra itebilirsiniz
Tomasz Bartkowiak

Her repo projesi için kullanıcı belirlemelisiniz $ git config user.email
jasmintmp

8

Aşağıdaki adımları izleyin:

  1. Bunu anlamalısın, işe başlamadan önce yazarı tanımlamalısın! kayıtlar zaten dondurulmuş durumda: yazarları ve kaydedicileri için belirlenmiş isimleri var ve bunlar değiştirilemez.
# you can check what's currently:
git config user.name
git config user.email

git config user.name "your_github_username"
git config user.email "your_github_email"

# Again check what's currently:
git config user.name
git config user.email
  1. Kaydınızın kime etiketlendiğini kontrol edin?
git log
# once you're confirmed that it's tagged to you, then you should move to step 3

Yazarın yanlış olması durumunda, değişiklikleri kaybetmeden son işlemi kolayca geri alabilirsiniz.

Ayrıca 3. adıma geçmeden önce, akıl sağlığı kontrolü için birinci adımı izlemeyi unutmayın.!

  1. github_username ve github_password girmeniz için kendinize bir uyarı verin
git config --local credential.helper ""
git push
# it will ask you to enter your github_username and github_password

6

Kimlik Bilgisi Yöneticisi'ne gidin Windows Kimlik Bilgileri'ne gidin Genel Kimlik Bilgileri altındaki girişleri silin Yeniden bağlanmayı deneyin.


Teşekkürler. Yol Control Panel\All Control Panel Items\Credential Manager-> Windows Credentials.
Saheed

5

Daha önce de belirtildiği gibi kullanabilirsiniz

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

tek depo için kullanıcı adını ve e-postayı manuel olarak ayarlamak için, ancak bu komutu eklemeniz gerekir:

git commit --amend --reset-author

Değişiklikten önce zaten zorlamayı denediyseniz. Aksi takdirde değişiklikler yapılandırma dosyasında görünmez.


Bu doğru değil. --reset-author(İle --...) Ayrıca, en son zaman damgası işlemek son son yapılandırılan ad / e koyacağız. Yapılandırma dosyasındaki değişiklikleri etkilemez.
Ramon Snir

3

Kullanarak diğer kullanıcı adı için yeni bir uzak URL ekleyebilirsiniz. git remote add origin-username https://username@github.expedia.biz/repository_name.git

Bundan sonra, kullanmaya zorlarsanız git push -u origin-username master, bu sizden şifreyi soracaktır.


3

Bir makinede 2. bir github kimliğine nasıl sahip olacağımı bulamadım (bu yanıtların hiçbiri benim için işe yaramadı), ancak kendim gibi birden çok farklı github hesabına nasıl aktarabileceğimi buldum.

Aynı kullanıcı adıyla ancak farklı github hesaplarına aktar

  1. 2. github hesabınız için 2. bir SSH anahtarı ayarlayın ( böyle )

  2. Hesaplar arasında şu şekilde değişiklik yapın:

Yeni 2. github hesabımla itin

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

Ana hesabımla it

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

2

git config user.name yalnızca kaydettiğim adı değiştirir. Hala itemiyorum. Ben böyle çözdüm ve bence bu benim için kolay bir yol.

  1. Kullanacağınız bilgisayarda basmak istediğiniz kullanıcı adı altında bir SSH anahtarı oluşturun https://help.github.com/articles/connecting-to-github-with-ssh/

  2. Bu anahtarı https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/ adresine göndermek istediğiniz github kullanıcı hesabına ekleyin.

  3. SSH ile Klonlamayı seçin

Şimdi bu kullanıcı olarak o depoya girebilirsiniz.


2

Windows ve Windows için Git kullanıcısı altında ve managerkimlik bilgilerini (diğer adıyla Git-Credential-Manager-for-Windows Link ) yönetmek içinse , sorun, belirteçleri httpskullanarak GitHub'a iterken kullanıcılar arasında geçiş yapmanın kolay bir yolunun olmamasıdır OAuth.

Bunun nedeni, jetonun şu şekilde saklanmasıdır:

  • İnternet adresi: git:https://github.com
  • Kullanıcı adı: Personal Access Token
  • Parola: OAuth_Token

URL varyasyonları Internet Addressçalışmıyor, örneğin:

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

Çözüm: ad alanları . Bu, aşağıdaki konfigürasyonun ayrıntılarında bulunur Git-Credential-Manager-for-Windows:

Ondan alıntı yapmak:

ad alanı

Depolanan kimlik bilgileri için ad alanını ayarlar.

Varsayılan olarak GCM, depolanan tüm kimlik bilgileri için "git" ad alanını kullanır; bu yapılandırma değerinin ayarlanması, genel olarak veya ana bilgisayar başına kullanılan ad alanının kontrolüne izin verir.

git config --global credential.namespace name

Şimdi, kimlik bilgilerinizi Windows Kimlik Bilgileri Yöneticisi'nde şu şekilde saklayın:

  • İnternet adresi: git.username:https://github.com
  • Kullanıcı adı: Personal Access Token
  • Parola: OAuth_Token

Değiştirdiğimize dikkat edin: git-> git.username( usernamegerçek kullanıcı adınızı veya bunun uğruna, benzersiz tanımlayıcı olarak istediğiniz her şeyi değiştirdiğiniz yer)

Şimdi, belirli girişi kullanmak istediğiniz deponun içinde, şunu çalıştırın:

git config credential.namespace git.username

(Yine ... usernameistediğiniz değerle değiştirin )

Kişisel .git/configirade şimdi içerir:

[credential]
    namespace = git.username

Et voilá! Doğru kimlik bilgileri Windows Kimlik Bilgileri Deposundan alınacaktır.

Bu, elbette, hangi kullanıcının / e-postanın zorlandığını değiştirmez. Bunun için her zamanki gibi yapılandırmanız user.nameveuser.email


Teşekkür ederim. Bu benim için en iyi şekilde çalıştı (Windows 10). Windows Kimlik Bilgilerinde diğer git kullanıcı hesaplarının geçici olarak silinmesi yok, "hack" yok. Tüm depolar için bir global / host git kullanıcım var. Sadece birinin farklı kimlik bilgileri gerektirmesi dışında. Bu da ortamınıza uyuyorsa, her şeyi Windows kimlik bilgilerinde olduğu gibi bırakın, "özel" deponuza gidin ve git config credential.namespace git.usernamebelirtildiği gibi yazın (kullanıcı adını değiştirin). Bir dahaki sefere basarsanız, git sizden kullanıcı adı için yeni kimlik bilgilerini isteyecektir.
ford04


0

Kaydetmenin gerçekleştiği kullanıcı kimliği, yapılandırma dosyasında saklanır.

deponun en üstüne git vi .git / config

uygun kullanıcı kimliğine sahip olmak için "[uzak" kaynak "] 'dan sonra listelenen url satırını değiştirin


0

Ssh kullanırsanız ve

Some_username izni / reddedildi repository.git Alice_username

Alice_username olarak basmak istemiyorsanız, Alice_username'in github hesabına bilgisayarınızın ssh anahtarının eklenmediğinden emin olun.

Ssh anahtarımı alice'nin github hesabından sildim ve itme çalıştı.


0

bu çalışmalı: git push origin local-name:remote-name

Daha iyisi, GitLab için ikinci bir " origin" kullanıyorum , " origin2" diyorum :

git remote add origin2 ...
sonra

git push origin2 master

Geleneksel (kısa) git pushörtük olarak 1. " origin" ile olduğu gibi çalışmalıdır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.