Git'e belirli bir proje için doğru kimliği (ad ve e-posta) kullanması nasıl söylenir?


117

Kişisel dizüstü bilgisayarımı hem iş hem de kişisel projeler için kullanıyorum ve işteki taahhütlerim için iş e-posta adresimi (gitolite) ve geri kalanı için kişisel e-posta adresimi (github) kullanmak istiyorum.

Tümü genel veya geçici olan aşağıdaki çözümleri okudum:

  • git config --global user.email "bob@example.com"
  • git config user.email "bob@example.com"
  • git commit --author "Bob <bob@example.com>"
  • birini ayarlamayı GIT_AUTHOR_EMAIL, GIT_COMMITTER_EMAILya da EMAILortam değişkenleri

Çözümlerden biri, ortamımı çalışmaya veya kişiselleştiren bir kabuk işlevini manuel olarak çalıştırmaktır , ancak çoğu zaman yanlış kimlik altında taahhütle sonuçlanan doğru kimliğe geçmeyi unutacağımdan oldukça eminim.

Belirli bir depoyu, proje adını vb. Bir kimliğe (ad, e-posta) bağlamanın bir yolu var mı? İnsanlar ne yapar?


1
Sizden cevaplardan birini kabul etmenizi rica ediyorum. Umarım bunlardan biri sorununuzu çözmenize yardımcı olmuştur.
RBT

Yanıtlar:


134

git config user.email "bob@example.com"

Bunu bir repo içinde yapmak, yapılandırmayı genel olarak değil, O repo üzerinde ayarlayacaktır.

Seni yanlış okumadığım sürece, peşinde olduğun şey bu gibi görünüyor.


Sanırım bunu yapmalı. Aynı proje için birden fazla yerel depoya sahip olmayı bekliyorum, özellikle de her şeyi yeniden derlemek zorunda kalmadan şubeler arasında daha kolay geçiş yapabilmek için. Belki de bu sadece kötü bir alışkanlıktır. Teşekkürler.
Martin Jambon

1
@ Martin - Git'i uzun süredir kullanmıyorum, ancak anladığım kadarıyla birden çok yerel depo kullanmanın git için alışılmadık bir iş akışı olacağı. Öyle olsa bile, bunu bir repo örneğinde yalnızca bir kez çalıştırmanız gerekir ve bu deponun ömrü için ayarlanmıştır, bu yüzden o kadar da kötü değil.
Dan Ray

@DanRay Martin durumunda olduğu gibi, yerel depoda yerel taahhüt edilmeyen dosyalar varsa, bu aslında yaygın bir kurulumdur. Bir şubeden diğerine geçmek, dosyaları otomatik olarak yeniden oluşturmaz. Hedef "her şeyi yeniden derlemekten" kaçınmaksa, birden çok yerel depo kullanmak bunu yapmanın doğru yoludur.
dolmen

1
git config --global user.email "bob@example.com" --global'ı eklemek, tüm depolarda çalışmasını sağlar. kaynak: help.github.com/articles/setting-your-username-in-git
SashiOno

1
Bu manuel bir görevdir ve unutulabilir. Otomatik çözümler öneriliyor @ dragon788 ve ben
naitsirch

47

Yerel seti kullanmanız gerekirAşağıdaki komutunu :

yerel küme

git config user.email mahmoud@company.ccc
git config user.name 'Mahmoud Zalt'

yerel get

git config --get user.email
git config --get user.name

Yerel yapılandırma dosyası proje dizinindedir: .git/config .

küresel küme

git config --global user.email mahmoud@zalt.me
git config --global user.name 'Mahmoud Zalt'

küresel almak

git config --global --get user.email
git config --global --get user.name

Ana dizininizdeki global yapılandırma dosyası: ~/.gitconfig .

Boşlukları, vb. Alıntılamayı unutmayın, örneğin: 'FirstName LastName'


23

Farklı kullanıcı adını korumak için yapılandırma dosyasını ".git" klasöründe düzenleyin ve e-posta depoya bağlıdır

  • Deponuza gidin
  • Gizli dosyaları gösterin ve ".git" klasörüne gidin
  • "Yapılandırma" dosyasını bulun
  • Aşağıdaki satırları EOF'ye ekleyin

[Kullanıcı]

name = Bob

email = bob@example.com

Aşağıdaki komut, bu depo için hangi kullanıcı adı ve e-posta setini gösterir.

git config - kullanıcı.adı elde et

git config --get user.email

Örnek: benim için D: \ workspace \ eclipse \ ipchat \ .git \ config'deki o yapılandırma dosyası

İşte ipchat benim repo adım


16

Eğer kullanırsanız git config user.email "foo@example.com", içinde bulunduğunuz mevcut projeye bağlı olacaktır.

Projelerim için yaptığım şey bu. Depoyu klonladığımda / başlattığımda uygun kimliği ayarlıyorum. Aptalca bir kanıt değildir (eğer unutursanız ve ıslandığınızı anlamadan önce bastırırsanız) ama söyleme yeteneği olmadan elde edebileceğiniz kadar iyidir.git config --global user.email 'ILLEGAL_VALUE'

Aslında, yasadışı bir değer yaratabilirsiniz. Ayarlayıngit config --global user.name $(perl -e 'print "x"x968;')

Daha sonra, global olmayan değerlerinizi ayarlamayı unutursanız, bir hata mesajı alırsınız.

[DÜZENLE] Farklı bir sistemde, x sayısını "ölümcül: İnanılmaz derecede uzun kişisel tanımlayıcı" ile başarısız olması için 968'e çıkarmak zorunda kaldım. Git'in aynı sürümü. Garip.


Harika bir numara gibi geliyor ama benim için işe yaramadı. Gitolite uzaktan kumandaya hem commit hem de push başarılı oldu.
Martin Jambon

@Martin Jambon: Garip. Git sürüm 1.7.4.5'i kullanıyorum
Seth Robertson

@Martin Jambon: Global kullanıcı adınızı / e-posta adresinizi "x" olarak ayarlamayı da deneyebilirsiniz. Git'in bazı eski sürümleri çok küçük değerleri reddetti. Bu işe yaramazsa sahip olduğunuz git sürümüne / işletim sistemine sahip olduğunuzu bildirin.
Seth Robertson

@Martin Jambon: 968 "x" deneyin ve bunun sizin için daha iyi olup olmadığını görün.
Seth Robertson

8

--globalParametreyi kullanmazsanız , değişkenleri yalnızca mevcut proje için ayarlar.


8

Git includeIf2.13'ten itibaren, git komutlarınızı çalıştırdığınız deponun yoluna bağlı olarak farklı bir konfigürasyona sahip bir dosya eklemek için gitconfig'inizde bir kullanabilirsiniz .

Ubuntu 18.04 ile yeterince yeni bir Git geldiğinden, bunu ~/.gitconfigoldukça mutlu bir şekilde kullanıyorum.

[include]
  path = ~/.gitconfig.alias # I like to keep global aliases separate
  path = ~/.gitconfig.defaultusername # can maybe leave values unset/empty to get warned if a below path didn't match
# If using multiple identities can use per path user/email
# The trailing / is VERY important, git won't apply the config to subdirectories without it
[includeIf "gitdir:~/projects/azure/"]
  path = ~/.gitconfig.azure # user.name and user.email for Azure
[includeIf "gitdir:~/projects/gitlab/"]
  path = ~/.gitconfig.gitlab # user.name and user.email for GitLab
[includeIf "gitdir:~/projects/foss/"]
  path = ~/.gitconfig.github # user.name and user.email for GitHub

https://motowilliams.com/conditional-includes-for-git-config#disqus_thread

Git 2.13'ü kullanmak için ya bir PPA eklemeniz (18.04 / Debian'dan eski Ubuntu) ya da ikili dosyaları indirip kurmanız (Windows / diğer Linux) gerekir.


Çok yardımcı oldu ve tam da aradığım şey. İle birlikte git config core.sshCommandçoklu özel anahtarlar için, komple dikişsiz git kimlik yönetimini verir.
topr

0

Çözümlerden biri, ortamımı işe yarayacak veya kişiselleştirecek bir kabuk işlevini manuel olarak çalıştırmaktır, ancak çoğu zaman yanlış kimlik altında taahhütle sonuçlanan doğru kimliğe geçmeyi unutacağımdan oldukça eminim.

Bu benim sorunumdu. Eğer uzak ve herhangi GitHub varsa sizi uyaran bir kanca komut dosyası yazdım değil yerel bir kullanıcı adı tanımladı.

İşte nasıl kuracağınız:

  1. Global kancayı tutmak için bir dizin oluşturun

    mkdir -p ~/.git-templates/hooks

  2. Git'e git init veya clone çalıştırdığınızda her şeyi ~/.git-templatesproje başına .gitdizininize kopyalamasını söyleyin

    git config --global init.templatedir '~/.git-templates'

  3. Ve şimdi aşağıdaki satırları konumuna kopyalayın ve ~/.git-templates/hooks/pre-commitdosyayı çalıştırılabilir yapın (bunu unutmayın, aksi takdirde git onu çalıştırmayacaktır!)

#!/bin/bash

RED='\033[0;31m' # red color
NC='\033[0m' # no color

GITHUB_REMOTE=$(git remote -v | grep github.com)
LOCAL_USERNAME=$(git config --local user.name)

if [ -n "$GITHUB_REMOTE" ] && [ -z "$LOCAL_USERNAME" ]; then
    printf "\n${RED}ATTENTION: At least one Github remote repository is configured, but no local username. "
    printf "Please define a local username that matches your Github account.${NC} [pre-commit hook]\n\n"
    exit 1
fi

Özel havuzlarınız için başka ana bilgisayarlar kullanıyorsanız, değiştirmelisiniz github.com , ihtiyaçlarınıza göre gerekir.

Şimdi her yaptığınızda git initveya git clonegit bu betiği depoya kopyalayacak ve herhangi bir işlem yapılmadan önce çalıştıracaktır. Yerel bir kullanıcı adı belirlemediyseniz, bir uyarı verir ve işlemenize izin vermez.


0

Micah Henning'in bu konudaki makalesinde ( Git Kimliklerini Ayarlama konusuna bakın) şeklini çok beğendim . Oluşturulan / klonlanan her depoya kimliği uygulayıp zorlaması, her seferinde bunu ayarlamayı unutmamak için iyi bir yoldur.

Temel git yapılandırması

Git'teki mevcut kullanıcı yapılandırmasını kaldır:

$ git config --global --unset user.name
$ git config --global --unset user.email
$ git config --global --unset user.signingkey

Her yeni yerel depoda kimlik yapılandırmasını zorlayın:

$ git config --global user.useConfigOnly true

identityKomut için Git takma adı oluşturun , daha sonra kullanacağız:

$ git config --global alias.identity '! git config user.name "$(git config user.$1.name)"; git config user.email "$(git config user.$1.email)"; git config user.signingkey "$(git config user.$1.signingkey)"; :'

Kimlikler oluşturma

GPG ile bir kimlik oluşturun (kullanın gpgveya gpg2sisteminizde ne olduğuna bağlı olarak). Kullanmak istediğiniz her kimlik için sonraki adımları tekrarlayın.

Not: [keyid]İşte oluşturulan gizli anahtarın tanımlayıcısı . Örnek burada:

sec   rsa4096/8A5C011E4CE081A5 2020-06-09 [SC] [expires: 2021-06-09]
      CCC470AE787C057557F421488C4C951E4CE081A5
uid                 [ultimate] Your Name <youremail@domain>
ssb   rsa4096/1EA965889861C1C0 2020-06-09 [E] [expires: 2021-06-09]

8A5C011E4CE081A5Bölüm sonra sec rsa4096/ise tanımlayıcı anahtarın.

$ gpg --full-gen-key
$ gpg --list-secret-keys --keyid-format LONG <youremail@domain>
$ gpg --armor --export [keyid]

Genel anahtar bloğunu kopyalayın ve GitHub / GitProviderOfChoice ayarlarınıza GPG anahtarı olarak ekleyin.

Git yapılandırmasına kimlik ekleyin. Ayrıca eklemek istediğiniz her kimlik için bunu tekrarlayın:

Not: Burada kullandığım gitlabiçin isim kimliğimi ancak sorudan o şey, eski olabilir: gitoliteya github, workvb

$ git config --global user.gitlab.name "Your Name"
$ git config --global user.gitlab.email "youremail@domain"
$ git config --global user.gitlab.signingkey [keyid]

Depo için kimlik kurulumu

Yeni bir deponun ilişkilendirilmiş kimliği yoksa, kaydetme sırasında size onu ayarlamanızı hatırlatan bir hata görünecektir.

*** Please tell me who you are.

## parts of message skipped ##

fatal: no email was given and auto-detection is disabled

Yeni bir depoda istediğiniz kimliği belirtin:

$ git identity gitlab

Artık gitlab kimliğiyle işlemeye hazırsınız .

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.