क्या आपके .gitconfig में एक फ़ाइल शामिल करना संभव है


245

मैं अपनी .gitconfig में एक फ़ाइल को शामिल करना चाहूंगा जिसमें मेरी गितुब सेटिंग है - क्या यह संभव है?

क्या मैं ऐसा कुछ कर सकता हूं:

[core]
    include = /path/to/file

3
"मैं इसमें जीथब विवरण शामिल नहीं करना चाहता हूं, इसलिए मैं उन्हें किसी बाहरी फ़ाइल से किसी भी तरह शामिल करना चाहूंगा": यही ठीक है कि वैश्विक कॉन्फिग फ़ाइल क्या है। क्या आपके मामले में इसका उपयोग नहीं करने का कोई कारण है?
वॉनक

11
हां, क्योंकि मैं एक गिट रिपॉजिटरी में .itconfig को प्रकाशित करना चाहता हूं और मैं नहीं चाहता कि कोई मेरी गितुब क्रेडेंशियल्स चोरी करे।
डेविड रेनॉल्ड्स

मैं आपका अनुसरण नहीं करता: आपकी नियमित gitconfig फ़ाइल को github में प्रकाशित किया जाएगा, लेकिन बिना किसी github सेटिंग्स के। क्यों? क्योंकि वे आपके ग्लोबल कॉन्फिग फाइल ( ~/.gitconfig) में होंगे, यानी आपके गिथब रेपो में धकेले नहीं जाएंगे । जब आप ' git config' टाइप करते हैं, तो आप जो देखते हैं वह 3 कॉन्फिगर फाइल (रेपो, ग्लोबल और सिस्टम) का कॉनसेप्ट है। केवल रेपो कॉन्फिग फ़ाइल को पुश किया जाता है। 2 अन्य लोग स्थानीय हैं।
VonC

90
ऐसा लगता है कि हर कोई इस प्रश्न के बिंदु से चूक गया। डेविड स्पष्ट रूप से अपनी सभी डॉट फाइलों (bashrc, gemrc, आदि) के एक रेपो को पुश करना चाहता है। उसकी .gitconfig को शामिल करना ताकि वह अपनी सभी मशीनों पर अपनी सभी सेटिंग्स रख सके। निजी प्रविष्टियों को शामिल और अनदेखा करके .gitconfig फ़ाइल के कुछ हिस्सों को धकेलने का एक तरीका वह है (और मैं, उस बात के लिए)
बो जीन्स

5
@ बीन: ठीक! मैं अभी भी यह करने के लिए एक रास्ता नहीं मिला है।
डेविड रेनॉल्ड्स

जवाबों:


302

Git (1.7.10+) अब इस सिंटैक्स का समर्थन करता है .gitconfig:

[include]
    path = /path/to/file

गिट परिवर्तन और इसके किनारे के मामलों के विस्तृत विवरण के लिए यहां देखें ।

वैसे, कुछ सूक्ष्मताओं को इंगित करने लायक है:

  1. पर्यावरण-चर विस्तार, उदाहरण के लिए $HOME, समर्थित नहीं है। ( ~Git 1.7.10.2 में छपा विस्तार ।)

  2. यदि कोई सापेक्ष पथ निर्दिष्ट किया गया है, तो यह .itconfig फ़ाइल के सापेक्ष है जिसमें [include]कथन है। जंजीर में भी यह सही ढंग से काम करता है - जैसे ~/.gitconfigहो सकता है:

    [include]
        path = subdir/gitconfig
    

    और subdir/gitconfigहो सकता है:

    [include]
        path = nested_subdir/gitconfig
    

    ... जो subdir/nested_subdir/gitconfigलोड करने का कारण होगा ।

  3. यदि git लक्ष्य फ़ाइल नहीं ढूँढ सकता है, तो यह चुपचाप त्रुटि को अनदेखा करता है। यह डिजाइन द्वारा प्रतीत होता है।


7
वास्तव में आप की जरूरत नहीं है ~। इसका कारण यह है कि आपकी .itconfig-फ़ाइल को अभी भी ~/.gitconfigविन्यास में एक सापेक्ष पथ में रहना होगा ~...
मजबूत

2
~/ $HOMEविस्तार के रूप में वास्तव में है git describe --contains 4c0a89fc> - v1.7.10.2~12^2(यानी v1.7.10.2उल्लेखनीय रूप में यह डेबियन 7 लगती है और Ubuntu Quantal साथ जारी करेंगे या बाद में), v1.7.10.4
फ़क्सफ़ॉक्स

1
क्या यह ग्लब्स का समर्थन करता है? उदा। पथ = ~ / gitconfig.d / *?
ब्रेट

1
@ ब्रेट नहीं, यह ग्लब्स का समर्थन नहीं करता है।
माइक मोरेर्टटी

8
ध्यान दें कि इस तरह से शामिल कॉन्फ़िगरेशन तब नहीं दिखाया जाएगा जब कोई विशिष्ट फ़ाइल दी गई हो (जो कि, के साथ --global, --localया --file), जब तक कि स्पष्ट रूप से --includes(जैसे git config --global --includes --list) नहीं बताया गया हो ।
फ्रैंकलिन यू

16

अपडेट 2012:

देखिए माइक मोरारी का जवाब :

शामिल

आप किसी विशेष include.pathफ़ाइल को शामिल किए जाने वाले फ़ाइल के नाम पर सेट करके दूसरे से एक कॉन्फ़िगर फ़ाइल शामिल कर सकते हैं ।
शामिल फ़ाइल को तुरंत विस्तारित किया जाता है, जैसे कि उसकी सामग्री शामिल निर्देश के स्थान पर मिली थी।
यदि include.pathचर का मान एक सापेक्ष पथ है, तो पथ को कॉन्फ़िगरेशन फ़ाइल के सापेक्ष माना जाता है जिसमें शामिल निर्देश पाया गया था।
का मान include.pathटिल्ड विस्तार के अधीन है: ~/के मूल्य में $HOME, और ~user/निर्दिष्ट उपयोगकर्ता के घर निर्देशिका में विस्तारित किया जाता है ।


मुझे ऐसा नहीं लगता है।

मैं उस सेटिंग को फ़ाइल में रखना चाहूंगा~/.gitconfig

उपयोगकर्ता-विशिष्ट कॉन्फ़िगरेशन फ़ाइल। जिसे "वैश्विक" कॉन्फ़िगरेशन फ़ाइल भी कहा जाता है।

इस तरह, यह .itconfig प्रोजेक्ट-विशिष्ट फ़ाइल को पूरा करता है, बिना प्रकाशित किए बिना जब GitHub पर धकेल दिया जाता है। वैश्विक कॉन्फ़िगरेशन फ़ाइल पर अधिक के लिए यह SO उत्तर भी देखें ।
Git में 3 कॉन्फिग फाइल हैं


bjeanes टिप्पणियों में जोड़ता है:

ऐसा लगता है कि हर कोई इस प्रश्न के बिंदु से चूक गया।
डेविड स्पष्ट रूप से एक (उसके सारे डॉट फ़ाइलों की रेपो को धक्का करना चाहता है bashrc, gemrcआदि) अपने सहित .gitconfigइसलिए वह सब हो सकता है उसकी अपनी सारी मशीनों पर सेटिंग्स। निजी प्रविष्टियों को शामिल और अनदेखा करके
किसी .gitconfigफ़ाइल के कुछ हिस्सों को धकेलने का एक तरीका वह (और मैं, उस बात के लिए) है।

एक संभव तरीका यह होगा कि एक संवेदनशील फ़ाइल को निजी संवेदनशील संवेग ( इस धागे को देखें ) के साथ डिक्रिप्ट / एन्क्रिप्ट करने के लिए एक स्मज / क्लीन फिल्टर ड्राइवर का उपयोग किया जाए, ताकि डिक्रिप्टेड भागों के साथ एक स्थानीय फ़ाइल जैसे ~ / .conconfig को पूरा किया जा सके। फ़ाइल।

इस तरह आप अपने सभी डॉट फ़ाइलों के साथ एक जीआईटी रेपो कर सकते हैं, साथ ही एन्क्रिप्टेड जानकारी के साथ एक फाइल को डीक्रिप्ट किया जा सकता है और कहा गया डॉट फाइल्स में जोड़ा जा सकता है।

वैकल्पिक शब्द

में .gitattributes(या .git/info/a..) का उपयोग करें:

myPrivateInfosFile filter=gpg diff=gpg

आपकी रेपो .config फ़ाइल में:

[filter "gpg"]
smudge = gpg -d -q --batch --no-tty
clean = gpg -ea -q --batch --no-tty -r C920A124
[diff "gpg"]
textconv = decrypt

( GPG- आधारित समाधान का अर्थ है, निश्चित रूप से, आपने गंतव्य कंप्यूटर पर किसी अन्य माध्यम से अपनी निजी / सार्वजनिक कुंजी का संचार किया है, जहाँ आप इस विशेष रेपो को क्लोन करके अपनी सभी डॉट फ़ाइलों को पुनर्स्थापित करना चाहते हैं)

वास्तव में, आपके मामले में, स्मूद स्क्रिप्ट को पूरा करना होगा, क्योंकि उस फाइल को डिक्रिप्ट करने के बाद, अपनी वैश्विक ~/.gitconfigफ़ाइल में प्रासंगिक भागों को जोड़ना और जोड़ना (जब तक कि आप किसी अन्य स्थान के साथ वैश्विक कॉन्फ़िगरेशन फ़ाइल को ओवरराइट न करें ) या उसके लिए अन्य डॉट फाइलें मामला।

https://kerneltrap.org/mailarchive/git/2008/3/13/1153274/thread (gpg असुविधाओं पर आगे इसी सूत्र में चर्चा की गई है ) (यह पूरी तरह से अलग Git repo होने से अलग है, जैसा कि यहां चर्चा की गई है )


5
मैं अपनी बेसिक .itconfig फ़ाइल को git रिपॉजिटरी में प्रकाशित करना चाहता हूं, लेकिन मैं इसमें github विवरण शामिल नहीं करना चाहता, इसलिए मैं उन्हें किसी भी तरह से बाहरी फ़ाइल से क्यों शामिल करना चाहूंगा।
डेविड रेनॉल्ड्स

10

आप इसे कमांड-लाइन से लोड कर सकते हैं:

$ git config --local include.path "/path/to/.gitconfig"

"$PWD"/.gitconfigयदि आप वर्तमान निर्देशिका से फ़ाइल लोड करना चाहते हैं, तो इसके बजाय का उपयोग करें ।

कमांड से ऊपर चलने के बाद, निम्न पंक्तियाँ आपकी .git/configफ़ाइल में जुड़ जाती हैं :

[include]
        path = /path/to/.gitconfig

2

मेरा मानना ​​है कि आप इसे डिफंकट हब टूल का उपयोग करके पूरा कर सकते हैं । यह git कमांड के लिए एक आवरण है जो अन्य बातों के अलावा, आपके पास GITHUB_USERऔर GITHUB_TOKENपर्यावरण चर रखने की अनुमति देता है । जो स्थानीय .gitconfigफ़ाइल में सेटिंग्स को ओवरराइड करेगा ।

फिर इसे उस उपयोगकर्ता को निर्बाध बनाने के लिए जिसे आपने alias git=hubउसके ZSH विन्यास में अलियास किया है । आपको तब एक स्थानीय फ़ाइल को स्रोत करने में सक्षम होना चाहिए जहां आप अपने पर्यावरण चर को सेट करते हैं और अपने सभी निजी जानकारी के साथ अपने रिपॉजिटरी को सार्वजनिक दुनिया में धक्का देते हैं।

** OSX पर homebrew उपयोगकर्ताओं के लिए नोट, आप के माध्यम से उपकरण स्थापित कर सकते हैं brew install hub

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