2012-10-31 16 views
5

द्वारा submodules में परिवर्तन की उपेक्षा बनाने के लिए के बाद से gitmodules Git में पेश किए गए, मैं उन्हें इतना की तरह जोड़ना चाहते:Git डिफ़ॉल्ट

[submodule "actionbarsherlock"] 
path = actionbarsherlock 
url = git://github.com/JakeWharton/ActionBarSherlock.git 
ignore = dirty 

महत्वपूर्ण यहाँ हिस्सा ignore = dirty है।

git submodule add कमांड का उपयोग करते समय, मुझे .gitmodules फ़ाइल में अपने आप को इस लाइन को जोड़ने के लिए मजबूर होना पड़ता है।

मैं इसे git submodule add के लिए डिफ़ॉल्ट व्यवहार कैसे बना सकता हूं, मैं भविष्य में बनाउंगा?

मुझे submodule.<name>.ignore कॉन्फ़िगरेशन के बारे में पता है, लेकिन डिफ़ॉल्ट रूप से इसे सभी पर कैसे लागू करें?

+0

डिफ़ॉल्ट रूप से ऐसा करने का कोई तरीका नहीं है, लेकिन आप आसानी से इसे करने के लिए उपनाम या स्क्रिप्ट जोड़ सकते हैं। – Christopher

+0

मुझे नहीं पता कि उपनाम द्वारा इसे कैसे किया जाए। और स्क्रिप्ट के लिए, मुझे उम्मीद है कि गिट के पास – shkschneider

+0

गिट के लिए एक डिफ़ॉल्ट विकल्प था, जो कि $ gAT- '' git 'के रूप में शुरू होता है जो $ PATH में किसी भी स्क्रिप्ट को उपनाम के रूप में पेश करेगा। आप केवल एक शेल स्क्रिप्ट लिख सकते हैं जो सबमिड्यूल नाम स्वीकार करता है, इसे जोड़ता है, फिर 'सबमिशन को जारी करता है। .ignore' कॉन्फ़िगरेशन और बस इसे 'git supersubmodule' या कुछ कहते हैं। – Christopher

उत्तर

3

तो इसे बंद करने के लिए, कोई, इसके लिए डिफ़ॉल्ट विकल्प नहीं है (दुख की बात है)।

+0

यह अभी भी गिट v2.7.0 पर सच प्रतीत होता है। –

1

मुझे डिफ़ॉल्ट विकल्प के बारे में निश्चित नहीं है। गया यह एक द्विआधारी राज्य (उपेक्षा या नहीं), आप कर्षण के साथ मिल सकता है:

diff.ignoreSubmodules 
    Sets the default value of --ignore-submodules. Note that this affects only git diff Porcelain, and not lower level diff commands such as git diff-files. git checkout also 
    honors this setting when reporting uncommitted changes. 

लेकिन आप dirty उपयोग कर रहे हैं के रूप में मुझे यकीन है कि नहीं कर रहा हूँ एक डिफ़ॉल्ट सेट करने के लिए एक तरह से नहीं है। भले ही, आप इसे अपने $PATH में गिट उपनाम के साथ कर सकते हैं। एक स्क्रिप्ट लिखें जो सबमिशन को तर्क के रूप में स्वीकार करती है और उचित dirty कॉन्फ़िगरेशन मान सेट करें, फिर उस स्क्रिप्ट को अपने $PATH पर जोड़ें। इसे git-<command> पर कॉल करें और यह git <command> के रूप में उपलब्ध होगा।

+0

ठीक है, मैं diff और स्थिति के लिए विकल्प पता है, लेकिन एक बेहतर बात पसंद करेंगे। एक स्क्रिप्ट एक सकारात्मक विकल्प है। – shkschneider

+0

यह गिट सूची के लिए एक अच्छा उम्मीदवार है। ये आपको एक निश्चित उत्तर दे सकता है, और यदि वह उत्तर "नहीं" है, तो पैच का प्रस्ताव दिया जा सकता है। – Christopher

-1

क्या आपका यह मतलब है?

git config --global core.ignore dirty

जो आपके ~/.gitconfig फ़ाइल को वरीयता लिखता है।

+0

मुझे नहीं लगता कि यह काम करता है। कम से कम यह मेरे लिए काम नहीं कर रहा है (गिट 1.8.5)। –

+0

@brianclements इस संस्करण का कौन सा संस्करण समर्थन करता है? – shkschneider

+0

मैं उबंटू 14.04 पर गिट 1.9.1 का उपयोग करता हूं। लेकिन दूसरी समीक्षा पर, मुझे लगता है कि यह मेरे लिए भी काम नहीं करता है। लेकिन फिर, मुझे अपने सबोडोड्यूल के लिए "नई प्रतिबद्धता" और "अनचाहे सामग्री" को सतर्क करना वह व्यवहार है जिसे मैं वैसे भी चाहता था, शायद मैं ओपी के प्रश्न को गलत समझा। – brianclements

4

ध्यान दें कि भले ही ऐसी कॉन्फ़िगरेशन हो, तो गिट 2.0.1 (25 जून, 2014) अब भी आपको एक सबमिशन दिखाएगा जो मंचित किया गया है।

वर्तमान में submodule.<name>.ignore की स्थापना और/या diff.ignoreSubmodules "all" diff परिवार, की स्थिति के लिए submodule सभी परिवर्तनों के उत्पादन को दबा और प्रतिबद्ध करने के लिए Jens Lehmann (jlehmann)

द्वारा commit 1d2f393 देखें।

स्थिति के लिए और प्रतिबद्धता यह वास्तव में भ्रमित है, क्योंकि जब भी उपयोगकर्ता इसे अनदेखा करके एक अनदेखा सबमिशन के लिए एक नई प्रतिबद्धता रिकॉर्ड करने का विकल्प चुनता है तो यह परिवर्तन अलग-अलग परिवर्तनों के तहत दिखाई नहीं देगा।
चोट के अपमान को जोड़ने के लिए, बाद में "गिट प्रतिबद्ध" "nothing to commit" के साथ त्रुटि हो जाएगी जब केवल उपनिवेशों को अनदेखा किया जाता है।

wt_status बनाकर ठीक करें चरणबद्ध सबमिशन परिवर्तनों को मुद्रित करें, इससे कोई फर्क नहीं पड़ता कि सेटिंग्स को अनदेखा किया गया है या नहीं।
एकमात्र अपवाद तब होता है जब उपयोगकर्ता स्पष्ट रूप से "--ignore-submodules=all" कमांड लाइन विकल्प का उपयोग करता है, उस स्थिति में सबमिशन आउटपुट अभी भी दबाया जाता है।
यह "git commit" बनाता है, फिर भी काम करता है जब केवल अनदेखा पनडुब्बियों के संशोधनों को चरणबद्ध किया जाता है, क्योंकि यह आदेश wt_status संरचना के "कम्युनिटी" सदस्य का उपयोग करता है यह निर्धारित करने के लिए कि चरणबद्ध परिवर्तन मौजूद हैं या नहीं।

git commit भाग के लिए भी देखें commit c215d3d

+0

गिट-गुई के लिए एक ही सौदा: https://github.com/git/git/commit/e0db1dd7d4bc87825f0d7d743f1a01b4461a59ff – VonC

1

आज मुझे पता चला कि फाइल में जा रहा है और हाथ से लाइन जोड़ने के बिना git config उपयोग कर सकते हैं .gitmodules फ़ाइल को बदलने के लिए, और इसलिए जोड़ सकते हैं गंदा ध्वज की अनदेखी:

git config -f .gitmodules submodule.actionbarsherlock.ignore dirty 

मेरे मामले में, मैं उस आदेश के साथ एक स्क्रिप्ट में दो चरणों को स्वचालित करने में सक्षम था।