Di saya ~/.gitconfig
, saya mencantumkan alamat email pribadi saya di bawah [user]
, karena itulah yang ingin saya gunakan untuk repo Github.
Tapi, saya baru-baru ini mulai menggunakan git untuk bekerja juga. Repositori git perusahaan saya memungkinkan saya untuk melakukan, tetapi ketika mengirimkan pengumuman perubahan baru, ia mengatakan itu berasal dari Anonim karena tidak mengenali alamat email di saya .gitconfig
- setidaknya, itulah teori saya.
Apakah mungkin untuk menentukan beberapa [user]
definisi di .gitconfig
? Atau ada cara lain untuk mengganti default .gitconfig
untuk direktori tertentu? Dalam kasus saya, saya memeriksa semua kode kerja ~/worksrc/
- apakah ada cara untuk menentukan .gitconfig
hanya direktori itu (dan subdirektori)?
git
git-config
Brock Boland
sumber
sumber
Jawaban:
Anda dapat mengonfigurasi repo individual untuk menggunakan pengguna / alamat email tertentu yang mengesampingkan konfigurasi global. Dari akar repo, jalankan
sedangkan pengguna / email default dikonfigurasi di ~ / .gitconfig Anda
sumber
.git/config
filegit config --edit
dangit config --global --edit
. Dan jika Anda melewatkan komentar Abizern , file konfigurasi repositori ada di<repo-root>/.git/config
.Git 2.13
rilis hari ini.Sejak git 2.13 , dimungkinkan untuk menyelesaikan ini dengan menggunakan Conditional include yang baru diperkenalkan .
Sebuah contoh:
Konfigurasi global ~ / .gitconfig
Konfigurasi khusus ~ ~ work / .gitconfig
sumber
git config --list
direktori yang berbeda. Dalam subdirektori~/work/
yang berisi repositori git,includeIf
efeknya berlaku. Perhatikan bahwa dalam subdirektori~/work/
yang tidak mengandung repositori git,includeIf
itu tidak dijalankan.Atau Anda dapat menambahkan informasi berikut di
.git/config
file lokal Andasumber
Satu perintah beralih akun github
Solusi ini mengambil bentuk alias git tunggal. Setelah dieksekusi, pengguna proyek saat ini akan dilampirkan ke akun lain
Buat kunci ssh
Tautkan ke akun GitHub / Bitbucket Anda
pbcopy < ~/.ssh/id_rsa.pub
add SSH key
halaman githubpbcopy < ~/.ssh/id_rsa_pro.pub
Langkah 1. Pergantian kunci ssh otomatis.
Kami dapat mengonfigurasi
ssh
untuk mengirim penggunaan kunci enkripsi tertentu tergantung padahost
. Yang menyenangkan adalah Anda dapat memiliki beberapa alias untuk hal yang samahostname
.Lihat contoh
~/.ssh/config
file ini:git konfigurasi jarak jauh
Anda sekarang dapat menggunakan alias ini di remote git dengan mengubahnya
[email protected]
dengangit@github_pro
.Anda dapat mengubah remote proyek yang ada (menggunakan sesuatu seperti
git remote set-url origin git@github_pro:foo/bar.git
) atau menyesuaikannya secara langsung saat mengkloningnya.menggunakan alias, itu menjadi:
git clone git@github_pro:ArnaudRinquin/atom-zentabs.git
Langkah 2. Mengubah git user.email
Pengaturan konfigurasi git dapat bersifat global atau per proyek. Dalam kasus kami, kami menginginkan pengaturan per proyek. Sangat mudah untuk mengubahnya:
Meskipun ini mudah, perlu waktu lama bagi pengembang kami. Kita dapat menulis alias git yang sangat sederhana untuk itu.
Kami akan menambahkannya ke
~/.gitconfig
file.Maka, yang harus kita lakukan adalah
git setpromail
mengubah email kita untuk proyek ini saja.Langkah 3. Tolong, satu saklar perintah ?!
Bukankah lebih baik untuk beralih dari akun default ke yang ditentukan dengan satu perintah parameter-kurang? Ini pasti mungkin. Perintah ini akan memiliki dua langkah:
Kami sudah memiliki solusi satu perintah untuk langkah kedua, tetapi yang pertama jauh lebih sulit. Satu perintah perubahan host jarak jauh
Inilah solusinya dalam bentuk perintah alias git lain untuk ditambahkan ke Anda
~/.gitconfig
:Ini memungkinkan mengubah semua remote dari satu host ke yang lain (alias). Lihat contohnya:
Gabungkan semuanya
Kami sekarang hanya harus menggabungkan dua perintah menjadi satu, ini cukup mudah. Lihat bagaimana saya juga mengintegrasikan switching host bitbucket.
Tautan Sumber -Tutorial
sumber
setpromail
alias saya melakukanconfig --global
sebaliknya (dan saya memiliki alias set lain untuk mengatur alamat email yang berbeda). Berhasil!useConfigOnly = true
dari jawaban yang lain.Setelah mendapatkan beberapa inspirasi dari posting blog Orr Sella, saya menulis kait pre-commit (berada di
~/.git/templates/hooks
) yang akan menetapkan nama pengguna dan alamat email tertentu berdasarkan informasi di dalam repositori lokal./.git/config
:Anda harus menempatkan path ke direktori templat ke
~/.gitconfig
:Kemudian masing
git init
- masing ataugit clone
akan mengambil kait itu dan akan menerapkan data pengguna selama berikutnyagit commit
. Jika Anda ingin menerapkan hook ke repo yang sudah ada maka jalankan agit init
di dalam repo untuk menginisialisasi ulang itu.Berikut adalah kait yang saya buat (masih perlu dipoles - saran dipersilahkan). Simpan baik sebagai
atau
dan pastikan itu dapat dieksekusi:
chmod +x ./post-checkout || chmod +x ./pre_commit
EDIT:
Jadi saya menulis ulang hook sebagai hook dan perintah dengan Python. Selain itu dimungkinkan untuk memanggil skrip sebagai perintah Git (
git passport
), juga. Juga dimungkinkan untuk menentukan jumlah ID yang berubah-ubah di dalam configfile (~/.gitpassport
) yang dapat dipilih pada prompt. Anda dapat menemukan proyek di github.com: git-passport - Perintah dan kait Git yang ditulis dengan Python untuk mengelola beberapa akun Git / identitas pengguna .sumber
chmod +x post-checkout
, 2.git_remotes
nilai adalah bagian awal dari seluruh nama host, misalnya[email protected]
, 3.local_id
nilai harus diedit oleh pengguna ke nama dan alamat email masing-masing.git init
proyek baru dari IDE sepertieclipse
(yang tidak dapat menangani pemicu pra-komit interaktif)Jika Anda tidak ingin memiliki alamat email default ( tautan alamat email ke pengguna github ), Anda dapat mengonfigurasi bahwa Anda ingin ditanya. Bagaimana Anda bisa melakukannya tergantung pada versi git yang Anda gunakan, lihat di bawah.
Kelemahan (yang dituju) adalah Anda harus mengonfigurasi alamat email Anda (dan nama Anda) satu kali untuk setiap repositori. Jadi, Anda tidak bisa lupa melakukannya.
Versi <2.7.0
dalam konfigurasi global Anda
~/.gitconfig
sebagaimana dinyatakan dalam komentar oleh Dan Aloni di posting blog Orr Sella . Ketika mencoba melakukan komit pertama di repositori, git gagal dengan pesan yang bagus:Nama ini diambil dari konfigurasi global ketika alamat email diatur secara lokal (pesannya tidak sepenuhnya akurat).
2.7.0 ≤ Versi <2.8.0
Perilaku dalam versi <2.7.0 tidak dimaksudkan dan diperbaiki dengan 2.7.0. Anda masih dapat menggunakan kait pra-komitmen seperti yang dijelaskan dalam posting blog Orr Sella . Solusi ini juga berfungsi untuk versi lain, tetapi solusi lain tidak untuk versi ini.
Versi ≥ 2.8.0
Dan Aloni menambahkan opsi untuk mencapai perilaku itu (lihat catatan rilis ). Gunakan dengan:
Untuk membuatnya berfungsi, Anda tidak boleh memberikan nama atau alamat email di konfigurasi global. Kemudian, pada komit pertama, Anda mendapatkan pesan kesalahan
Jadi pesannya tidak terlalu instruktif, tetapi karena Anda menetapkan opsi secara eksplisit, Anda harus tahu apa yang harus dilakukan. Berbeda dengan solusi versi <2.7.0, Anda selalu harus menetapkan nama dan email secara manual.
sumber
git bisect
menemukan bahwa commit 19ce497c ... memperkenalkan perilaku ini. Namun, terlepas dari versi (2.5 - 2.7) saya dapat menggunakanemail =
(tanpa argumen) di konfigurasi dan itu menunjukkan perilaku yang sama sepertiemail = "(none)"
di versi lama. Bisakah Anda mengkonfirmasi ini? Jika demikian, saya akan mengedit jawaban saya. Saya hanya skeptis karena tampaknya begitu jelas dan saya tidak menggunakannya sebelumnya.email =
di 2.7.0, Git masih menebak-nebak alamat email berdasarkan nama pengguna dan nama host. Saya sekarang menggunakanpre-commit
pendekatan di blog Sella. Saya juga memberi tahu Dan Aloni yang muncul dengan"(none)"
gagasan di pos Sella dan dia mengajukan tambalan untuk mengimplementasikannya secara formal sebagai fitur: permalink.gmane.org/gmane.comp.version-control.git/285301Dengan bersyarat termasuk dalam Git 2.13, sekarang dimungkinkan untuk memiliki banyak pengguna / email yang ada pada satu mesin dengan sedikit kerja.
user.gitconfig
memiliki nama dan email pribadi saya.work-user.gitconfig
memiliki nama dan email pekerjaan saya. Kedua file berada di~
jalur.Jadi nama / email pribadi saya berlaku secara default. Untuk
c:/work/
dir, nama / email pekerjaan saya diterapkan. Untukc:/work/github/
dir, nama / email pribadi saya diterapkan. Ini berfungsi saat pengaturan terakhir diterapkan.gitdir
peka huruf besar-kecil dangitdir/i
case-sensitive."gitdir/i:github/"
akan menerapkan conditional include untuk direktori apa pungithub
yang dilaluinya.sumber
gitdir/i
membantu saya (yang jawabannya tidak disebutkan).Opsi lain untuk mulai
git
bekerja dengan beberapa nama / email adalah dengan aliasinggit
dan menggunakan-c
flag untuk mengganti konfigurasi global dan repositori-spesifik.Misalnya, dengan mendefinisikan alias:
Untuk melihat apakah itu berfungsi, cukup ketik
git config user.email
:Alih-alih sebuah alias, Anda juga bisa menempatkan custom
git
executable di dalam$PATH
.Keuntungan dari metode ini daripada repositori-spesifik
.git/config
adalah bahwa ia berlaku untuk setiapgit
repositori ketikagit
program kustom aktif. Dengan cara ini, Anda dapat dengan mudah beralih di antara pengguna / nama tanpa mengubah konfigurasi (dibagi) apa pun.sumber
alias git (dan bagian dalam konfigurasi git) untuk menyelamatkan!
tambahkan alias (dari baris perintah):
lalu, atur, misalnya
dan dalam repo baru atau dikloning Anda dapat menjalankan perintah ini:
Solusi ini tidak otomatis, tapi unsetting pengguna dan email di Anda global yang
~/.gitconfig
dan pengaturanuser.useConfigOnly
untuktrue
akan memaksa git untuk mengingatkan Anda untuk mengatur secara manual di setiap repo baru atau kloning.sumber
Inilah langkah-langkah lengkap setelah membaca banyak jawaban di sini
Cara mengatur beberapa pengaturan Kunci SSH untuk akun github yang berbeda
Anda mungkin ingin mulai memeriksa kunci yang saat ini disimpan
Jika Anda memutuskan untuk menghapus semua kunci yang di-cache sebelumnya ( opsional, hati-hati tentang ini )
Kemudian Anda dapat membuat ssh pub / kunci privat yang ditautkan ke setiap email / akun yang ingin / perlu Anda gunakan
Setelah melakukan perintah ini, Anda akan membuat file-file berikut
Pastikan agen otentikasi sedang berjalan
Tambahkan kunci yang dihasilkan sebagai berikut (dari folder ~ / .ssh)
Sekarang Anda dapat memeriksa kunci yang disimpan lagi
Sekarang kamu perlu menambahkan kunci publik yang dihasilkan ke server Acces Keys github / bickbuket Anda
Kloning masing-masing repo ke folder yang berbeda
Buka folder tempat pengguna bekerja akan bekerja dan jalankan ini
Hanya untuk melihat apa yang dilakukannya, periksa isi ".git / config"
Pergi ke folder tempat pers pengguna akan bekerja dan jalankan ini
Hanya untuk melihat apa yang dilakukannya, periksa isi ".git / config"
Setelah semua ini, Anda akan dapat melakukan kode pribadi dan kerja Anda dengan hanya beralih di antara dua folder itu
Jika Anda menggunakan Git Bash dan perlu membuat kunci ssh di Windows ikuti langkah-langkah ini:
https://support.automaticsync.com/hc/en-us/articles/202357115-Generating-an-SSH-Key-on-Windows
sumber
Ada solusi sederhana yang tampaknya bekerja dengan baik untuk menghindari kesalahan.
Cukup hapus
[user]
bagian dari Anda~/.gitconfig
, yang akan mencegah Anda membuat komitmen tanpa pengaturanuser.name
untuk setiap repositori.Di Anda
~/.bashrc
, tambahkan beberapa alias sederhana untuk pengguna dan email:sumber
Jawaban ini sebagian terinspirasi oleh pos oleh @Saucier, tetapi saya sedang mencari cara otomatis untuk mengatur
user.name
danuser.email
berdasarkan per repo, berdasarkan pada remote, yang sedikit lebih ringan daripada paket paspor git yang dikembangkannya. . Juga h / t ke @John untuk pengaturan useConfigOnly. Inilah solusi saya:.gitconfig
perubahan:kait pasca checkout yang harus disimpan ke jalur berikut
~/.git-templates/hooks/post-checkout
::Saya menggunakan kredensial berbeda untuk github dan gitlab, tetapi referensi dalam kode di atas dapat diganti atau ditambah dengan layanan apa pun yang Anda gunakan. Untuk membuat kait pasca-checkout secara otomatis mengatur nama pengguna dan email secara lokal untuk repo setelah checkout memastikan nama layanan muncul di url jarak jauh, tambahkan ke array layanan dalam
post-checkout
skrip dan buat bagian untuk itu di Anda.gitconfig
yang berisi nama pengguna dan email Anda untuk layanan itu.Jika tidak ada nama layanan yang muncul di url jarak jauh atau repo tidak memiliki remote, nama pengguna dan email tidak akan ditetapkan secara lokal. Dalam kasus ini,
user.useConfigOnly
pengaturan akan dimainkan yang tidak memungkinkan Anda membuat komitmen sampai nama pengguna dan email ditetapkan pada level repo, dan akan meminta pengguna untuk mengonfigurasi informasi itu.sumber
chmod 755
skrip kaitnya. Kalau tidak, itu akan disalin tetapi tidak pernah dieksekusi.GIT_AUTHOR_EMAIL
+ lokal.bashrc
.bashrc_local
: jangan lacak file ini, taruh hanya di komputer kantor Anda:.bashrc
: lacak file ini, buat hal yang sama di komputer kantor dan di rumah:Saya menggunakan https://github.com/technicalpickles/homesick untuk menyinkronkan dotfiles saya.
Jika hanya gitconfig yang akan menerima variabel lingkungan: Ekspansi variabel shell di git config
sumber
Lingkungan Windows
Tambahan ini dapat dimodifikasi dari
Git Extensions --> Settings --> Global Settings
, jika Anda menginstalnya di sistem Anda.gitextensions-latest-release
Klik kanan pada folder / direktori di Lingkungan Windows untuk mengakses pengaturan ini.
Pembaruan : Cara beralih / mempertahankan beberapa pengaturan di Versi 2.49
sumber
Mungkin ini adalah hack sederhana, tetapi bermanfaat. Cukup buat 2 kunci ssh seperti di bawah ini.
Cara yang sama buat satu lagi untuk pribadi. Jadi, Anda memiliki 2 kunci ssh, kerja dan perusahaan. Salin work.pub, work, personal.pub, personal ke ~ / .ssh / Direktori.
Kemudian buat skrip shell dengan baris berikut dan beri nama crev.sh (Pembalikan Perusahaan) dengan konten berikut.
Cara yang sama, buat satu lagi yang disebut prev.sh (Pembalikan Pribadi) dengan konten berikut.
di ~ / .bashrc tambahkan alias untuk skrip seperti di bawah ini
Setiap kali Anda ingin menggunakan perusahaan, lakukan saja crev, dan jika Anda ingin menggunakan pribadi do prev :-p.
Tambahkan kunci ssh itu ke akun GitHub Anda. Pastikan, Anda tidak memiliki id_rsa yang dihasilkan sebelumnya, karena skrip tersebut akan menimpa id_rsa. Jika Anda telah membuat id_rsa, gunakan itu untuk salah satu akun. Salin sebagai pribadi dan lewati pembuatan kunci pribadi.
sumber
Saya membuat fungsi bash yang menangani itu. Ini repo Github .
Sebagai catatan:
sumber
Cukup tambahkan ini ke ~ / .bash_profile Anda untuk beralih di antara kunci default untuk github.com
sumber
Anda juga dapat menggunakan
git commit --author "Your Name <[email protected]>"
saat melakukan komit dalam repo di mana Anda ingin komit sebagai pengguna yang berbeda.sumber
Sesuatu seperti jawaban Rob W. , tetapi memungkinkan berbeda kunci ssh yang berbeda, dan bekerja dengan versi git yang lebih lama (yang tidak memiliki mis. Konfigurasi core.sshCommand).
Saya membuat file
~/bin/git_poweruser
, dengan izin yang dapat dieksekusi, dan di PATH:Setiap kali saya ingin melakukan atau mendorong sesuatu sebagai "Power User", saya menggunakan
git_poweruser
sebagai gantinyagit
. Ini harus bekerja pada direktori apa pun, dan tidak memerlukan perubahan.gitconfig
atau.ssh/config
, setidaknya tidak di tambang.sumber
Meskipun sebagian besar pertanyaan semacam menjawab OP, saya hanya harus melalui ini sendiri dan bahkan tanpa googling saya dapat menemukan solusi tercepat dan paling sederhana. Inilah langkah-langkah sederhana:
.gitconfg
dari repo Anda yang lain.gitconfig
file, seperti nama, email dan nama pengguna[user] name = John email = [email protected] username = john133
.gitignore
daftar, untuk memastikan Anda tidak melakukan.gitconfig
file ke repo kerja Andasumber