Bagaimana cara mendorong ke GitHub dengan nama pengguna yang berbeda?

158

Seorang teman dan saya sendiri sedang berbagi komputer. Saya telah mendorong GitHub menggunakan git bash shell pada Windows 7. Sekarang kami berada di proyek yang berbeda di komputer itu dan saya perlu dia mendorong ke akunnya. Tetapi terus mencoba menggunakan nama pengguna saya dan mengatakan saya tidak memiliki akses ke repositori nya:

$ 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
di.
sumber
Apakah ini membantu help.github.com/articles/setting-your-email-in-git (gunakan git config --global user.name her_username) sebelum mendorong
Prinzhorn
Saya melihat Anda beralih ke url HTTPS sehingga github selalu meminta kredensial. Hanya ingat bahwa komit akan tetap direkam seperti yang dilakukan oleh pengguna di git config user.name dan git config user.email terlepas dari siapa yang melakukan push. ps Saya tidak berpikir ada sejarah yang mendorong apa.
Jorge Orpinel
29
git config --local credential.helper ""dapat melakukan trik.
SOFe
Saya tidak dapat mengikuti solusi yang diberikan di sini pada sistem windows saya. Langkah-langkah yang diberikan dalam jawaban ini akhirnya berhasil stackoverflow.com/a/15382950/351903
Sandeepan Nath
@ SOFe itulah yang saya cari! Apakah perintah ini secara efektif menghapus beberapa kredensial yang di-cache?
CCJ

Jawaban:

94

Jika Anda menggunakan pengguna windows yang berbeda, kunci SSH dan pengaturan git Anda akan independen.

Jika ini bukan opsi untuk Anda, maka teman Anda harus menambahkan kunci SSH Anda ke akun Github-nya.

Meskipun, solusi sebelumnya akan membuat Anda terus mendorong diri sendiri, tetapi itu akan memungkinkan Anda untuk mendorong repo-nya. Jika Anda tidak menginginkan ini dan bekerja di folder berbeda pada PC yang sama, Anda dapat mengatur nama pengguna dan email secara lokal di dalam folder dengan git dengan menghapus -gflag dari perintah config:

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

Atau, jika Anda mendorong https protokol, Github akan meminta nama pengguna / kata sandi setiap kali (kecuali jika Anda menggunakan pengelola kata sandi).

Simon Boudrias
sumber
6
Sejauh yang saya ingat, kunci SSH harus unik di Github, Anda tidak dapat memiliki kunci yang sama terpasang ke beberapa akun
Gareth
@ Gareth Mungkin, tetapi Anda dapat mengatur beberapa kunci SSH untuk pengguna yang sama di windows (dan di mana-mana saya tahu).
Simon Boudrias
tidak dapat memiliki dua kunci, lihat jawaban saya di bawah ini.
chovy
1
Untuk setiap proyek:git config --global user.name "Mona Lisa"
w3spi
237

Ini bekerja untuk saya, itu akan meminta nama pengguna dan kata sandi

git config --local credential.helper ""
git push origin master
pengusaha licik
sumber
1
Terima kasih, itu bekerja untuk saya, saya menggunakan bitbucket dan saya akan mengkonfigurasi nama pengguna saya, tetapi ini menyelesaikan migrasi ke aws code-commit
Alejandro Ruiz
Saya telah helper = cache --timeout=999999mengatur .gitignoredan ini berhasil. Tapi ada cara untuk mengatur ulang itu tanpa mengubah konfigurasi lokal saya ingin tahu?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
Ini luar biasa!
hargun3045
Inilah yang saya cari !!!
aagjalpankaj
1
Lebih baik jelaskan apa yang dilakukannya di sini: Ini mengkonfigurasi repo lokal Anda untuk mengabaikan (mungkin secara global) dikonfigurasi credential.helper, misalnya toko kredensial Windows. Ini juga berarti meminta nama pengguna / kata sandi setiap kali membutuhkannya, karena tidak ada yang dikonfigurasi, Jadi mungkin Anda juga dapat mengkonfigurasi credential.helperuntuk cache sebagai gantinya (lihat jawaban @Ciro Santilli) atau gunakan jawaban yang berbeda di sini.
rugk
53

Anda dapat mendorong dengan menggunakan akun yang berbeda. Misalnya, jika akun Anda adalah A yang disimpan di .gitconfig dan Anda ingin menggunakan akun B yang merupakan pemilik repo yang ingin Anda push.

Akun B : B_user_name, B_password
Contoh tautan SSH: https://github.com/B_user_name/project.git

Dorongan dengan akun B adalah:

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

Untuk melihat akun di .gitconfig

  1. $git config --global --list
  2. $git config --global -e (untuk mengubah akun juga)
thotruong
sumber
Wah ini jawabannya !! Saya telah menetapkan user.name, user.emaildalam konfigurasi lokal, saya telah mengkloning dengan nama pengguna, dan tidak berfungsi; sekarang jawaban terakhir berfungsi tanpa menyentuh gantungan kunci / apa pun ... di Git 2.9.0 in Windows. "akhirnya tetapi tidak sedikit" ... inilah yang disebut. Terima kasih. Jawaban ini layak mendapat lebih banyak dukungan.
WesternGun
3
Satu-satunya efek samping, adalah kata sandi / nama pengguna Anda dicatat dalam bash history .. Tapi itu berfungsi untuk saya.
WesternGun
Terima kasih untuk ini, inilah tepatnya yang ingin saya lakukan. Namun, ini mendorong untuk dikuasai. Bagaimana saya mendorong ke cabang selain master?
Steven Anderson
2
@WesternGun Jangan berikan kata sandi di url jika Anda ingin mencegahnya agar tidak direkam dalam bash history. Gunakan https://'B_user_name'@github.com/B_user_name/project.git. Ini akan meminta kata sandi B_user_name.
subtleseeker
24

Saya menyiapkan alias ssh menggunakan kustom IdentityFiledan menulis ulang asal untuk menggunakan me-githubnama host kustom saya .

#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 [email protected]: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
kenyal
sumber
5
Alih-alih menghapus lalu menambahkan, kita dapat mengubah url jarak jauh dengan: git remote set-url origin git@user1-github:user1/my-repo.git 😊
Ninh Pham
18

Jika Anda menggunakan URL SSH ( [email protected]:username/projectname.git) daripada URL HTTPS, Anda dapat menentukan sementara kunci SSH yang berbeda menggunakan $GIT_SSH_COMMANDvariabel lingkungan:

$ GIT_SSH_COMMAND="ssh -i different_private_key" git push

Sejauh yang saya tahu, dengan URL SSH, GitHub tidak peduli dengan nama pengguna, hanya tentang kunci: jika akun pengguna memiliki akses ke repositori, dan akun itu memiliki kunci SSH (lihat halaman kunci SSH di akun itu pengaturan), maka jika Anda menggunakan kunci SSH untuk mendorong ke repositori itu, push akan dianggap berasal dari pengguna itu.

David Moles
sumber
1
ini tidak bekerja untuk saya, menarik, mengubah user.namedan user.emaildigit config akan mengubah akun yang komit berhubungan dengan
Kevin Zhao
Ini berhasil untuk saya. Hanya sebuah komentar kecil untuk membuat jawabannya lebih jelas. "different_private_key" adalah file di hostA yang berisi kunci pribadi penggunaB atas nama yang kami ingin melakukan "git push" pada hostA menjadi userA. Anda harus membuat file ini di hostA (misalnya, sebagai ~ / .ssh / id_rsa_userB) dan meletakkan di sana isi file ~ / .ssh / id_rsa dari hostB di mana userB ada. Bahkan tidak masalah jika userB ada atau tidak ada di hostA.
Alexander Samoylov
15

Jika setelah menjalankan git pushGit meminta kata sandi user, tetapi Anda ingin mendorongnya new_user, Anda mungkin ingin menggunakan git config remote.origin.url:

$ git push
[email protected]:either/branch/or/path's password:

Pada titik ini gunakan ^Cuntuk keluar git pushdan gunakan follow untuk mendorong sebagai new_user.

$ git config remote.origin.url
[email protected]:either/branch/or/path

$ git config remote.origin.url [email protected]:either/branch/or/path

$ git push
[email protected]:either/branch/or/path's password:
Lukasz Czerwinski
sumber
Halo, saya mencoba solusi ini untuk mendorong ke simpanan atlassian. Saya mendapatkan kesalahan "<URL> / info / refs tidak ditemukan: apakah Anda menjalankan git update-server-info di server?" Saya rasa saya tidak bisa menjalankan perintah di Stash. Apakah Anda memiliki Ide bagaimana menyelesaikan ini? Terima kasih!
Zsolt Szilagyi
Untuk GitHub, ini akan terlihat seperti:git config remote.origin.url https://[email protected]/different_user/repo.git
NumesSanguis
13

Sangat sederhana saat melakukan kloning, silakan gunakan URL git dengan nama pengguna Anda. Sementara melakukan itu akan menanyakan kata sandi pengguna baru Anda.

Misalnya:

git clone https: //[email protected]/username/reponame.git

git clone https: //[email protected]/username/reponame.git

Krishnamoorthy Acharya
sumber
4
Jawaban ini setidaknya harus memiliki lebih banyak suara. Jika Anda tidak melakukan seperti yang dikatakan @Krishna Kavoor, Anda akan selalu memiliki masalah, karena meskipun secara global Anda memiliki nama pengguna1 dan secara lokal Anda memiliki nama pengguna2, git akan mencoba menggunakan nama global.
Markon
Tidak bekerja. Aku menggunakannya dan itu mengatakan: fatal: repo not found.
WesternGun
1
Ini bekerja selalu Karena saya punya 3 proyek berbeda dari 3 klien berbeda. Ini berfungsi seperti keajaiban. Silakan periksa jalur repo Anda sudah benar.
Krishnamoorthy Acharya
8

jika ini masalahmu

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

Selain mengubah nama pengguna dan email dari terminal menggunakan git config:

$ git config --global user.name "Bob"
$ git config --global user.email "[email protected]"

Anda harus menghapus info otorisasi dari Keychain. Solusi ini butuh beberapa jam untuk mencari tahu. Saya menemukan bahwa saya juga memiliki sertifikat di gantungan kunci saya.

Buka akses Keychain, klik Semua Item dan cari git. Hapus semua gantungan kunci

Muyide Ibukun
sumber
Apa mitra Windows 7 untuk Keychain?
Thomas Eyde
Tidak yakin, tetapi akan mengetahuinya
Muyide Ibukun
Saya kira saya juga terjebak di sini. Apakah kamu mengetahuinya?
Sandeepan Nath
Tidak, pada akhirnya tidak mengetahuinya, tetapi saya menduga itu seharusnya tidak terlalu sulit
Muyide Ibukun
1
terima kasih atas saran tentang menghapus info otorisasi dari Keychain
Luja Shrestha
7

Saya telah menggunakan satu mesin untuk mendorong kode ke dua akun GitHub yang berbeda dengan nama pengguna yang berbeda. Anggap Anda sudah menyiapkan satu akun dan ingin menambahkan yang baru:

  1. Hasilkan kunci SSH baru ssh-keygen -t rsa -C "[email protected]"
  2. Simpan, tapi ingat untuk tidak menimpa yang ada id_rsa. Berikan nama yang berbeda, misid_rsa_another
  3. Salin konten kunci ke akun GitHub Anda:

Pengaturan -> Kunci SSH dan GPG -> Kunci SSH Baru -> Beri label dan tempel tombol -> Tambahkan kunci SSH

  1. Tambahkan kunci ke agen ssh: ssh-add ~/.ssh/id_rsa_another
  2. Siapkan host GitHub: Buat file konfigurasi dengan touch ~/.ssh/configdan edit file dengan memberikan konfigurasi ke akun Anda:
#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

Sekarang Anda harus dapat mendorong dari akun yang berbeda tergantung pada kunci apa yang Anda tambahkan ke agen ssh, yaitu untuk menggunakan akun pertama Anda, lakukan ssh-add ~/.ssh/id_rsa .

Anda mungkin juga ingin mengubah email pengguna Anda:

git config --global user.email "[email protected]"

atau bersihkan kunci ssh jika terjadi kesalahan izin saat mendorong kode ke salah satu akun:

ssh-add -D

Tomasz Bartkowiak
sumber
1
Ya, saya sudah menetapkan beberapa akun. Tetapi bagaimana saya bisa mendorong dengan akun pertama. Bisakah Anda berbagi perintah?
codemicky
Apa yang Anda maksud dengan "bagaimana saya bisa mendorong"? Tidak git pushbekerja Anda harus bisa mendorong setelah menambahkan kunci Anda
Tomasz Bartkowiak
Anda harus mengatur pengguna untuk setiap proyek repo $ git config user.email
jasmintmp
6

Pergi ke Manajer Kredensial Pergi ke Kredensial Windows Hapus entri di bawah Kredensial Generik Coba sambungkan lagi.

Deepak
sumber
Terima kasih. Jalannya adalah Control Panel\All Control Panel Items\Credential Manager-> Windows Credentials.
Saheed
4

Seperti yang disebutkan sebelumnya, Anda dapat menggunakan

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

untuk secara manual mengatur nama pengguna dan email untuk repo tunggal, tetapi Anda harus menambahkan perintah ini:

git commit --amend --reset-author

jika Anda sudah mencoba untuk mendorong sebelum perubahan. Kalau tidak, perubahan tidak muncul dalam file konfigurasi.

Martin819
sumber
Ini tidak benar. The --reset-author(dengan --...) akan menempatkan terbaru dikonfigurasi nama / email di komit terakhir, dan juga timestamp terbaru. Itu tidak mempengaruhi perubahan dalam file konfigurasi.
Ramon Snir
3

Anda dapat menambahkan URL jarak jauh baru untuk menggunakan nama pengguna lain git remote add origin-username https://[email protected]/repository_name.git

Setelah ini, jika Anda akan mendorong menggunakan git push -u origin-username master, ini akan meminta Anda untuk kata sandi.

Raman Singh
sumber
2

git config user.name hanya mengubah nama yang saya komit. Saya masih tidak bisa mendorong. Ini adalah bagaimana saya menyelesaikannya, dan saya pikir ini adalah cara yang mudah bagi saya.

  1. Buat kunci SSH dengan nama pengguna yang ingin Anda tekan di komputer, Anda akan menggunakan https://help.github.com/articles/connecting-to-github-with-ssh/

  2. Tambahkan kunci ini ke akun pengguna github yang ingin Anda dorong ke https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/

  3. Pilih untuk Mengkloning dengan SSH

Anda dapat mendorong sebagai pengguna ini ke repo itu sekarang.

Yang Fang
sumber
2

Jika di bawah Windows dan Git pengguna untuk Windows dan manageruntuk mengelola kredensial (alias Git-Credential-Manager-for-Windows Tautan ) masalahnya adalah bahwa tidak ada cara mudah untuk beralih di antara pengguna saat mendorong ke GitHub httpsmenggunakanOAuth token.

Alasannya adalah bahwa token disimpan sebagai:

  • Alamat internet: git:https://github.com
  • Nama pengguna: Personal Access Token
  • Kata sandi: OAuth_Token

Variasi URL di Internet Addresstidak berfungsi, misalnya:

Solusinya: namespaces . Ini ditemukan dalam rincian untuk konfigurasi Git-Credential-Manager-for-Windows:

Mengutip darinya:

namespace

Menetapkan namespace untuk kredensial yang disimpan.

Secara default, GCM menggunakan namespace 'git' untuk semua kredensial tersimpan, dengan menetapkan nilai konfigurasi ini memungkinkan untuk mengontrol namespace yang digunakan secara global, atau per host.

git config --global credential.namespace name

Sekarang, simpan kredensial Anda di Windows Credential Manager sebagai:

  • Alamat internet: git.username:https://github.com
  • Nama pengguna: Personal Access Token
  • Kata sandi: OAuth_Token

Perhatikan bahwa kami telah berubah: git-> git.username(di mana Anda berubahusername ke nama pengguna Anda yang sebenarnya atau untuk kepentingan itu, ke apa pun yang Anda inginkan sebagai pengidentifikasi unik)

Sekarang, di dalam repositori tempat Anda ingin menggunakan entri spesifik, jalankan:

git config credential.namespace git.username

(Sekali lagi ... ganti usernamedengan nilai yang Anda inginkan)

Sekarang Anda .git/configakan mengandung:

[credential]
    namespace = git.username

Et voilá! Kredensial yang tepat akan ditarik dari Windows Credential Store.

Ini, tentu saja, tidak mengubah pengguna / email mana yang mendorong. Untuk itu Anda harus mengkonfigurasi yang biasa user.namedanuser.email

mementum
sumber
Terima kasih. Ini bekerja paling baik untuk saya (Windows 10). Tidak ada penghapusan sementara akun pengguna git lain di Kredensial Windows, tidak ada "peretasan". Saya memiliki satu pengguna global / host git untuk semua repositori. Kecuali hanya satu dari mereka yang membutuhkan kredensial berbeda. Jika itu juga sesuai dengan lingkungan Anda, biarkan semuanya seperti di kredensial Windows, buka repositori "khusus" Anda dan ketik git config credential.namespace git.usernameseperti yang disebutkan (mengganti nama pengguna). Jika Anda mendorong waktu berikutnya, git akan meminta kredensial baru untuk nama pengguna.
ford04
2

Saya tidak tahu bagaimana cara mendapatkan identitas github ke-2 pada satu mesin (tidak ada jawaban yang cocok untuk saya), tetapi saya berhasil menemukan cara untuk dapat mendorong ke beberapa akun github yang berbeda seperti saya.

Dorong sebagai nama pengguna yang sama, tetapi ke akun github yang berbeda

  1. Siapkan kunci SSH ke-2 ( seperti itu ) untuk akun github ke-2 Anda

  2. Ubah antar akun sebagai berikut:

Dorong dengan akun github kedua saya yang baru

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

Dorong dengan akun utama saya

ssh-add -D
ssh-add ~/.ssh/id_rsa   
git push
keris
sumber
1

Jika Anda memiliki https://desktop.github.com/
maka Anda dapat pergi ke Preferensi (atau Opsi) -> Akun
dan kemudian keluar dan masuk.

Abe Jujur
sumber
Tidak ada menu Preferensi?
Thomas Eyde
@ThomasEyde Ada di macOS. Ini "Opsi" pada Windows.
Jujur Abe
1

Ikuti langkah-langkah berikut:

  1. Anda harus memahami itu, Anda mendefinisikan penulis sebelum melakukan! komit sudah dibekukan: mereka memiliki nama apa pun yang ditetapkan untuk penulis dan pengangkat mereka, dan ini tidak dapat diubah.
# 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. Periksa kepada siapa komit Anda ditandai?
git log
# once you're confirmed that it's tagged to you, then you should move to step 3

Dalam hal, penulis salah maka Anda dapat dengan mudah membatalkan komit terakhir tanpa kehilangan perubahan

Juga, sebelum pindah ke langkah 3, jangan lupa ikuti langkah satu untuk pemeriksaan kewarasan.!

  1. beri diri Anda prompt untuk memasukkan github_username dan github_password
git config --local credential.helper ""
git push
# it will ask you to enter your github_username and github_password
aakriti
sumber
0

Userid di mana komit terjadi disimpan dalam file konfigurasi.

buka bagian atas repositori vi. git / config

ubah baris url yang terdaftar setelah "[remote" origin "] untuk memiliki userid yang sesuai

wainCam
sumber
0

Jika Anda menggunakan ssh dan dapatkan

Izin untuk some_username / repository.git ditolak ke Alice_username

sementara Anda tidak ingin mendorong sebagai Alice_username, pastikan Alice_username tidak memiliki kunci ssh komputer Anda ditambahkan ke akun github-nya.

Saya menghapus kunci ssh saya dari akun github alice dan dorongan itu berhasil.

Achraf Amil
sumber