किसी प्रोजेक्ट के लिए सही पहचान (नाम और ईमेल) का उपयोग करने के लिए कैसे बताएं?


117

मैं अपने निजी लैपटॉप का उपयोग काम और व्यक्तिगत दोनों परियोजनाओं के लिए करता हूं और मैं अपने काम के लिए अपने ईमेल पते का उपयोग करना चाहता हूं (gitolite) और बाकी के लिए मेरा व्यक्तिगत ईमेल पता (github)।

मैं निम्नलिखित समाधानों के बारे में पढ़ता हूं जो सभी वैश्विक या अस्थायी हैं:

  • git config --global user.email "bob@example.com"
  • git config user.email "bob@example.com"
  • git commit --author "Bob <bob@example.com>"
  • में से एक की स्थापना GIT_AUTHOR_EMAIL, GIT_COMMITTER_EMAILया EMAILवातावरण चर

एक समाधान मैन्युअल रूप से एक शेल फ़ंक्शन चलाना है जो मेरे वातावरण को काम या व्यक्तिगत करने के लिए सेट करता है , लेकिन मुझे पूरा यकीन है कि मैं अक्सर सही पहचान पर स्विच करना भूल जाऊंगा, जिसके परिणामस्वरूप गलत पहचान हो जाएगी।

क्या एक निश्चित रिपॉजिटरी, प्रोजेक्ट का नाम आदि को किसी पहचान (नाम, ईमेल) से जोड़ने का एक तरीका है? लोग क्या करते है?


1
मेरा आपसे अनुरोध है कि कृपया उत्तर में से एक को स्वीकार करें। मुझे आशा है कि उनमें से एक ने आपकी समस्या को हल करने में आपकी मदद की होगी।
RBT

जवाबों:


134

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

रेपो के अंदर ऐसा करने से THAT रेपो पर कॉन्फ़िगरेशन सेट हो जाएगा, न कि विश्व स्तर पर।

ऐसा लगता है कि जब तक मैं आपको गलत नहीं कर रहा हूं, तब तक आप बहुत अधिक हैं।


मुझे लगता है कि यह करना चाहिए। मैं एक ही परियोजना के लिए कई स्थानीय रिपॉजिटरी होने की उम्मीद कर रहा हूं, विशेष रूप से शाखाओं के बीच स्विच करने के लिए विशेष रूप से सब कुछ फिर से तैयार किए बिना। शायद यह सिर्फ एक बुरी svn आदत है। धन्यवाद।
मार्टिन जाम्बोन

1
@ मार्टिन - मैं लंबे समय से वास्तविक का उपयोग नहीं कर रहा हूं, लेकिन मुझे जो समझ है वह यह है कि कई स्थानीय रिपोज का उपयोग करना गिट के लिए एक असामान्य वर्कफ़्लो होगा। फिर भी, आपको केवल रेपो के उदाहरण पर इसे चलाने की आवश्यकता होगी, और यह उस रेपो के जीवनकाल के लिए निर्धारित है, इसलिए यह इतना बुरा नहीं है।
दान रे

@DanRay यह वास्तव में एक सामान्य सेटअप है, जैसे कि मार्टिन के मामले में, स्थानीय रेपो में स्थानीय अप्रकाशित फाइलें होती हैं। एक शाखा से दूसरी शाखा में स्विच करने पर स्वचालित रूप से फ़ाइलों का पुनर्निर्माण नहीं होगा। यदि "सब कुछ फिर से शुरू करने के लिए" से बचना एक लक्ष्य है, तो कई स्थानीय रिपोज का उपयोग करना सही तरीका है।
डोलमेन

1
git config --global user.email "bob@example.com" - Theglobal को जोड़ने से यह सभी रिपोज़ों में काम करता है। स्रोत: help.github.com/articles/setting-your-username-in-git
शशिओनो

1
यह एक मैनुअल कार्य है और इसे भुलाया जा सकता है। स्वचालित समाधान @ ड्रैगन 788 और मेरे द्वारा
naitsirch

47

आपको नीचे दिए गए स्थानीय सेट कमांड का उपयोग करने की आवश्यकता है :

स्थानीय सेट

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

स्थानीय मिलता है

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

स्थानीय कॉन्फ़िगरेशन फ़ाइल प्रोजेक्ट निर्देशिका में है .git/config:।

वैश्विक सेट

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

वैश्विक मिलता है

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

आपके होम डायरेक्टरी में ग्लोबल कॉन्फिग फाइल ~/.gitconfig:।

उदाहरण के लिए ब्लैंक, आदि उद्धृत करना याद रखें: 'FirstName LastName'


23

अलग-अलग उपयोगकर्ता नाम और ईमेल को बनाए रखने के लिए ".it" फ़ोल्डर में कॉन्फ़िगर फ़ाइल को संपादित करें और रिपॉजिटरी पर ईमेल निर्भर करता है

  • अपने भंडार पर जाएँ
  • छिपी हुई फाइलें दिखाएं और ".गित" फ़ोल्डर में जाएं
  • "कॉन्फ़िगर" फ़ाइल ढूंढें
  • EOF पर नीचे की पंक्तियों को जोड़ें

[उपयोगकर्ता]

नाम = बॉब

ईमेल = bob@example.com

यह नीचे कमांड आपको दिखाता है कि इस रिपॉजिटरी के लिए कौन सा उपयोगकर्ता नाम और ईमेल सेट है।

git config --get user.name

git config --get user.email

उदाहरण: खान के लिए जो D: \ कार्यक्षेत्र \ ग्रहण \ ipchat \ में फ़ाइल को कॉन्फ़िगर करता है।। \ Config

यहाँ ipchat मेरा रेपो नाम है


16

यदि आप इसका उपयोग करते हैं, तो आप git config user.email "foo@example.com"वर्तमान परियोजना के लिए बाध्य होंगे।

यही मैं अपनी परियोजनाओं के लिए करता हूं। जब मैं रेपो को क्लोन / इनिट करता हूं तो मैं उचित पहचान निर्धारित करता हूं। यह मूर्खतापूर्ण सबूत नहीं है (यदि आप भूल जाते हैं और इससे पहले कि आप इसे ठीक कर लें, तो आप उसे धक्का दें), लेकिन यह उतना ही अच्छा है जितना आप कहने की क्षमता के बिना प्राप्त कर सकते हैंgit config --global user.email 'ILLEGAL_VALUE'

दरअसल, आप एक अवैध मूल्य बना सकते हैं। अपन सेट करेंgit config --global user.name $(perl -e 'print "x"x968;')

फिर यदि आप अपने गैर-वैश्विक मूल्यों को सेट करना भूल जाते हैं, तो आपको एक त्रुटि संदेश मिलेगा।

[संपादित करें] एक अलग प्रणाली पर मुझे "घातक: बहुत लंबे समय तक व्यक्तिगत पहचानकर्ता" के साथ असफल होने के लिए x की संख्या को बढ़ाकर 968 करना पड़ा। गिट का एक ही संस्करण। अजीब।


यह एक महान चाल की तरह लगता है, लेकिन यह मेरे लिए काम नहीं किया। कमिट और पुश करने के लिए गिटोलिट रिमोट दोनों सफल रहे।
मार्टिन जाम्बोन

@ मर्टिन जाम्बोन: अजीब। मैं git संस्करण 1.7.4.5 का उपयोग कर रहा हूं
सेठ रॉबर्टसन

@ मर्टिन जाम्बोन: आप अपने वैश्विक उपयोगकर्ता नाम / ईमेल पते को "x" पर सेट करने का भी प्रयास कर सकते हैं। गिट के कुछ पुराने संस्करणों ने बहुत छोटे मूल्यों को खारिज कर दिया। रिपोर्ट करें कि यदि आपके पास यह कार्य नहीं करता है तो git संस्करण / os क्या है।
सेठ रॉबर्टसन

@ मर्टिन जाम्बोन: 968 "x" आज़माएँ और देखें कि क्या यह आपके लिए बेहतर काम करता है।
सेठ रॉबर्टसन

8

यदि आप --globalपैरामीटर का उपयोग नहीं करते हैं तो यह केवल वर्तमान परियोजना के लिए चर सेट करेगा।


8

Git 2.13 के रूप में, आप includeIfअपने gitconfig में एक रिपॉजिटरी के पथ के आधार पर एक अलग कॉन्फ़िगरेशन के साथ एक फ़ाइल शामिल करने के लिए उपयोग कर सकते हैं जहाँ आप अपनी git कमांड चला रहे हैं।

चूँकि एक नया पर्याप्त Git उबंटू 18.04 के साथ आता है, इसलिए मैं इसे ~/.gitconfigकाफी खुशी से उपयोग कर रहा हूं ।

[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 का उपयोग करने के लिए आपको या तो PPA (Ubuntu 18.04 / Debian से अधिक पुराना) जोड़ना होगा या बायनेरिज़ को डाउनलोड करना होगा और (Windows / अन्य लिनक्स) इंस्टॉल करना होगा।


बहुत मददगार और बिल्कुल वही, जिसकी मुझे तलाश थी। git config core.sshCommandकई निजी कुंजियों के साथ संयुक्त , पूर्ण सहज पहचान प्रबंधन देता है।
टॉप

0

एक समाधान मैन्युअल रूप से एक शेल फ़ंक्शन चलाना है जो मेरे वातावरण को काम या व्यक्तिगत करने के लिए सेट करता है, लेकिन मुझे पूरा यकीन है कि मैं अक्सर सही पहचान पर स्विच करना भूल जाऊंगा, जिसके परिणामस्वरूप गलत पहचान हो जाएगी।

यही वास्तव में मेरी समस्या थी। मैंने एक हुक स्क्रिप्ट लिखी है जो आपको चेतावनी देती है कि यदि आपके पास कोई गितुब रिमोट है और एक स्थानीय उपयोगकर्ता नाम परिभाषित नहीं है।

यहां बताया गया है कि आपने इसे कैसे सेट किया है:

  1. वैश्विक हुक को धारण करने के लिए एक निर्देशिका बनाएँ

    mkdir -p ~/.git-templates/hooks

  2. जब आप गिटिट या क्लोन चलाते हैं, तो ~/.git-templatesअपनी प्रति-प्रोजेक्ट .gitनिर्देशिका में सब कुछ कॉपी करने के लिए कहें

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

  3. और अब निम्नलिखित पंक्तियों को कॉपी करें ~/.git-templates/hooks/pre-commitऔर फ़ाइल को निष्पादन योग्य बनाएं (इसे भूल न जाएं अन्यथा गिट इसे निष्पादित नहीं करेगा!)

#!/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

यदि आप अपने निजी रिपॉजिटरी के लिए अन्य मेजबानों का उपयोग करते हैं, तो आपको github.comअपनी आवश्यकताओं के अनुसार बदलना होगा।

अब हर बार जब आप एक git initया git clonegit करते हैं तो इस स्क्रिप्ट को रिपॉजिटरी में कॉपी कर लेंगे और किसी भी कमिटमेंट को करने से पहले इसे निष्पादित कर देंगे। यदि आपने एक स्थानीय उपयोगकर्ता नाम निर्धारित नहीं किया है, तो यह चेतावनी को आउटपुट करेगा और आपको प्रतिबद्ध नहीं होने देगा।


0

मैं बहुत अपने लेख में मीका हेनिंग के रास्ते की तरह (देखें ऊपर Git पहचान की स्थापना इस विषय पर)। तथ्य यह है कि वह लागू करता है और बनाए गए प्रत्येक क्लोन को पहचान को बाध्य करता है / क्लोन किया जाता है जो हर बार इसे स्थापित करने के लिए नहीं भूलना चाहिए।

बुनियादी गिट विन्यास

Git में वर्तमान उपयोगकर्ता कॉन्फिग को अनसेट करें:

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

प्रत्येक नए स्थानीय भंडार पर बल पहचान विन्यास:

$ git config --global user.useConfigOnly true

identityकमांड के लिए Git उपनाम बनाएं , हम बाद में उपयोग करेंगे:

$ 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)"; :'

रचनाएँ पहचानती हैं

GPG के साथ एक पहचान बनाएं ( अपने सिस्टम पर आपको जो मिला है gpgउसके gpg2आधार पर उपयोग करें या निर्भर करता है)। आपके द्वारा उपयोग की जाने वाली प्रत्येक पहचान के लिए अगले चरण दोहराएं।

नोट: [keyid]यहाँ बनाई गई गुप्त कुंजी की पहचानकर्ता है। यहाँ उदाहरण:

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]

के 8A5C011E4CE081A5बाद sec rsa4096/का हिस्सा कुंजी की पहचानकर्ता है।

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

सार्वजनिक कुंजी ब्लॉक की प्रतिलिपि बनाएँ और इसे अपने GitHub / GitProviderOfChoice सेटिंग्स में GPG कुंजी के रूप में जोड़ें।

Git config में पहचान जोड़ें। प्रत्येक पहचान के लिए इसे भी दोहराएं जिसे आप जोड़ना चाहते हैं:

नोट: यहाँ मैं का उपयोग gitlabकरने के लिए नाम : मेरी पहचान है, लेकिन आपके सवाल का से यह कुछ भी, पूर्व हो सकता है gitoliteया github, workआदि

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

एक रिपॉजिटरी के लिए सेटअप पहचान

यदि किसी नए रेपो से जुड़ी कोई पहचान नहीं है, तो एक त्रुटि दिखाई देगी, जो आपको इसे सेट करने की याद दिलाती है।

*** Please tell me who you are.

## parts of message skipped ##

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

एक नई रिपॉजिटरी पर इच्छित पहचान निर्दिष्ट करें:

$ git identity gitlab

अब आप gitlab पहचान के साथ प्रतिबद्ध हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.