Git: क्या मैं स्थिति, अंतर आदि में 'संशोधित सामग्री' / गंदे सबमॉडल प्रविष्टियों की सूची को दबा सकता हूं?


123

समथेन (1.6.x रिलीज़ के आसपास, मुझे लगता है) गिट सबमोडुल्स के अंदर होने वाले परिवर्तनों से अवगत हो गया। यह केवल मुझे गुस्सा दिलाने का काम करता है:

$ गिट स्थिति विक्रेता | grep संशोधित:
# संशोधित: विक्रेता / रेल (संशोधित सामग्री)
$ गिट भिन्न विक्रेता /
diff --it / a / seller / rails b / वेंडर / रेल
--- ए / विक्रेता / रेल
+++ बी / विक्रेता / रेल
@@ -1 +1 @@
-Sproproject कमिट 046c900df27994d454b7f906caa0e4226bb42b6f
+ सबप्रोजेक्ट प्रतिबद्ध 046c900df27994d454b7f906caa0e4226bb42b6f- गंदा

कृपया इसे रोकें?

संपादित करें:

ठीक है, तो मेरे पास एक जवाब है। अब मेरे पास एक और सवाल है:

क्या मैं इसमें डाल सकता हूं ~/.gitconfig? मेरे प्रारंभिक से यह प्रतीत होता है कि मैं नहीं कर सकता, और मैंने पैच को स्किम करके कुछ भी आशाजनक नहीं देखा। (मुझे लगता है कि मैं अभी भी एक उपनाम बना सकता हूं।)


मैं इस बारे में git मेलिंग सूची में कुछ पैच देखता हूं, जून 2010 की डेटिंग। तो उम्मीद है कि यह आगामी रिलीज में हो। ('git' के लिए गूगल --ignore-submodules = गंदा "')
kch

संदेश क्यों होता है यह समझाने के लिए +1!
dotancohen

जवाबों:


175

.Gitmodules फ़ाइल के भीतर प्रत्येक जोड़े गए सबमॉड्यूल के लिए इग्नोर मोड सेट करने की संभावना है।

बस आज मुझे इस समस्या का सामना करना पड़ा और मैंने तुरंत इसका पता लगाने के बाद इसके बारे में अपने ब्लॉग में एक लेख लिखा: git सबमिशन में बदलाव को कैसे नज़रअंदाज़ करें

इसका सार:

एक बार जब आप एक सबमॉड्यूल जोड़ लेते हैं तो .gitmodulesआपकी रिपॉजिटरी के रूट में एक फाइल होगी

उस .gitmodulesफ़ाइल में बस एक पंक्ति जोड़ें :

[submodule "bundle/fugitive"]
    path = bundle/fugitive
    url = git://github.com/tpope/vim-fugitive.git
    ignore = dirty

5
+1, लेकिन मैंने SO पर आपके उत्तर के लिए आपके ब्लॉग पोस्ट के मुख्य भाग को शामिल किया: एसओ के उत्तरों के विपरीत आपका बाहरी लिंक एक दिन अमान्य हो सकता है, जो हमेशा के लिए रहेगा (SO dumps के माध्यम से: blog.stackoverflow.com/2009/ 06 /… )
VONC

5
मुझे लगता है कि मुझे git statusउम्मीद के मुताबिक काम करने से पहले .itmodules फ़ाइल करने की आवश्यकता थी । इसके अलावा, आपको कम से कम 1.7.4 या बेहतर मुझे विश्वास है।
9

के लिए .gitignoreफ़ाइल, वहाँ एक निजी संस्करण कहा जाता है excludeमें स्थित है, .git/info/कौन-सा संस्करण नहीं संभाला है। क्या फ़ाइल के लिए एक संगत फ़ाइल है .gitmodules, जो आपको केवल परिवर्तन करने के बिना, माता-पिता के भंडार के उदाहरण में सबमॉडल में परिवर्तन को दबाने देगी .gitmodules?
HelloGoodbye

2
मैं एक शाखा पर नज़र रखने वाले सबमॉड्यूल के साथ काम करने के लिए इसे प्राप्त नहीं कर सकता। क्या यह उसके लिए समर्थित नहीं है? `` `[सबमॉडल" स्मस्टैक / ansible / होस्ट "] पथ = smstack / ansible / होस्ट url = https: // ... शाखा = मास्टर अनदेखा = गंदा` `` `` `
मार्क Abramowitz

1
@MarcAbramowitz मैंने उसी मुद्दे पर ठोकर खाई है जो मुझे लगता है - क्या आपको इसका कोई हल मिला?
सेबस्टियन जी। मरीनस्कु

61

दो प्रकार के परिवर्तन नोटिस हैं जिन्हें आप दबा सकते हैं।

पहला वह है untracked contentजो तब होता है जब आप अपने सबमॉड्यूल में बदलाव करते हैं लेकिन अभी तक उन लोगों के लिए प्रतिबद्ध नहीं हैं। माता-पिता भंडार इन्हें नोटिस करते हैं और git statusतदनुसार रिपोर्ट करते हैं:

modified: modules/media (untracked content)

आप इन्हें दबा सकते हैं:

[submodule "modules/media"]
   path = modules/media
   url = git@github.com:user/media.git
   ignore = dirty

हालाँकि, एक बार जब आप उन परिवर्तनों को कर लेते हैं, तो माता-पिता भंडार एक बार फिर से नोटिस लेंगे और तदनुसार रिपोर्ट करेंगे:

modified:   modules/media (new commits)

यदि आप इन्हें भी दबाना चाहते हैं, तो आपको allपरिवर्तनों को अनदेखा करने की आवश्यकता है

[submodule "modules/media"]
   path = modules/media
   url = git@github.com:user/media.git
   ignore = all

2
के लिए .gitignoreफ़ाइल, वहाँ एक निजी संस्करण कहा जाता है excludeमें स्थित है, .git/info/कौन-सा संस्करण नहीं संभाला है। क्या फ़ाइल के लिए एक संगत फ़ाइल है .gitmodules, जो आपको केवल परिवर्तन करने के बिना, माता-पिता के भंडार के उदाहरण में सबमॉडल में परिवर्तन को दबाने देगी .gitmodules?
HelloGoodbye

1
HelloGoodbye: यदि आप जाँच करते हैं। .it / मॉड्यूल / $ MODULENAME / आप देखेंगे कि उस मॉड्यूल के लिए .git निर्देशिका क्या प्रतीत होती है। उस स्थान पर जानकारी / फ़ाइल को बाहर करना काम को बदल देता है।
PaulW

1
ignore = allभाग उपयोगी है।
एरिक वांग

53

अद्यतन: देखें (और upvote) nilshaldenwang किसी दिए गए सबमॉड्यूल की गंदी स्थिति की अनदेखी करने के लिए एक कॉन्फ़िगरेशन पैरामीटर फ़ाइल में जोड़ने की संभावना के बारे में उत्तर दें.gitmodules

ignore = dirty

तो 1.7.2 git बाहर है और इसके लिए --ignore-submodulesविकल्प शामिल है status

से git help status:

--ignore-submodules [= <जब>]
    परिवर्तनों की तलाश करते समय सबमॉड्यूल्स में परिवर्तनों को अनदेखा करें।
    <जब> या तो "अनट्रैक", "गंदा" या "सभी" हो सकता है, जो
    डिफ़ॉल्ट है। जब "अनट्रैकड" का उपयोग किया जाता है तो सबमॉड्यूल्स होते हैं
    गंदा नहीं माना जाता है जब वे केवल अनारक्षित होते हैं
    सामग्री (लेकिन वे अभी भी संशोधित सामग्री के लिए स्कैन की गई हैं)।
    "गंदे" का उपयोग करने से काम के पेड़ में सभी परिवर्तनों की अनदेखी होती है
    सबमॉड्यूल्स, केवल जमा किए गए कमिट में बदल जाता है
    सुपरप्रोजेक्ट दिखाए गए हैं (यह पहले का व्यवहार था
    1.7.0)। "सभी" का उपयोग करने से सबमॉड्यूल (और) में सभी परिवर्तन छिप जाते हैं
    जब सबमॉड्यूल सारांश के उत्पादन को दबाता है
    config विकल्प स्थिति। submodulesummary सेट है)।

जो मूल्य मुझे चाहिए dirty

git status --ignore-submodules=dirty

मैं आलिया का उपयोग करता हूं क्योंकि मैं आलसी हूं:

alias gst='git status --ignore-submodules=dirty'

2
चूंकि यह एक स्वीकृत उत्तर है, इसलिए मुझे लगता है कि आपको यहां फ़ाइल ignore=dirtyमें व्यक्तिगत प्रविष्टियों को जोड़ने का विकल्प भी जोड़ना चाहिए .gitmodules
एंड्री Drozdyuk

14

जैसा कि आप उल्लेख करते हैं, पैच गिट सबमॉड्यूल: सारांश और स्थिति के लिए गंदे सबमॉड्यूल्स को अनदेखा करते हैं।

Git 1.7.2-rc2 रिलीज़ में भी घोषित :

Git v1.7.2 Release Notes (draft)
================================

Updates since v1.7.1
--------------------

" git status" मैंने सीखा " --ignore-submodules" विकल्प।

अर्थ:

git config --global diff.ignoreSubmodules dirty

एक विकल्प के रूप में इसके बारे में अभी के लिए चुना दृष्टिकोण बिल्कुल नहीं है :

इस श्रृंखला के बाद मैं एक कॉन्फिग विकल्प ' ignore' को जोड़ने की योजना बना रहा हूं .gitmodules, जिसे प्रत्येक सबमॉडल के लिए "सभी", "डर्टी", "अनट्रैकड" या "नो" (डिफॉल्ट) में सेट किया जा सकता है।

" git diff" और " git status" प्रत्येक सबमॉड्यूल के लिए उस विन्यास मूल्य का उपयोग करेगा।
" --ignore-submodule" इस डिफ़ॉल्ट को ओवरराइड करता है (और नया पैरामीटर "कोई भी नहीं" वहां जोड़ा जाएगा जो कि कॉन्फ़िगर सेटिंग्स को ओवरराइड करने में सक्षम है)।

और git submdule syncहर बार विकल्प को बदलने से बचने के लिए , मैं .git/configपहले इसे खोजना चाहूंगा ।
यदि यह वहां नहीं पाया जाता है .gitmodules, तो इसे वर्तमान से लिया जाएगा ।

इसलिए उपयोगकर्ता सेटिंग को ओवरराइड कर सकते हैं, लेकिन यदि वे नहीं करते हैं, तो अपस्ट्रीम इसे आसानी से बदल सकता है (उदाहरण के लिए जब एक सबमॉड्यूल्स .gitignoreको अपडेट किया गया है ताकि " ignore=untracked" अब जरूरी नहीं है कि इसे हटाया जा सके)।
यदि शाखाओं में ' ignore' के .gitmodulesबीच का अंतर अलग है तो स्विचिंग शाखाओं का तुरंत प्रभाव पड़ेगा ।


एक विशेष सबमॉडल को अनदेखा करने के लिए git स्टेटस (या कोई git कमांड) बनाने का एक और तरीका Git 2.13 (Q2) के साथ उपलब्ध है:

git config submodule.<name>.active false

" गिट सबमॉडल के लिए नए कामों को अनदेखा करें " पर और देखें ।


मैंने एक बिटकॉइन बिट के साथ सवाल अपडेट किया। यदि आप जवाब जानते हैं तो बस पिंगिंग करें।
kch

@kch: मैंने इस तरह की सेटिंग को संग्रहीत करने के लिए वर्तमान में प्रस्तावित दृष्टिकोण के साथ उत्तर को अपडेट किया है।
VonC

@ डॉरज़ी: जैसा कि आप अपनी अन्य टिप्पणी में उल्लेख करते हैं: " ignore = dirty"
वॉनसी

1
@ डॉर्ज़ी: मैंने अतिरिक्त कॉन्फिग पैरामीटर "इग्निशन / डर्टी" के साथ निल्सल्डेनवांग के उत्तर को अपविट किया और पूरा किया है, मैंने आधिकारिक उत्तर को संपादित कर दिया है, जो निल्सल्डेन्वांग के पोस्ट के लिंक को जोड़ता है।
VonC

धन्यवाद, व्यक्तिगत कुछ भी नहीं है, लेकिन मैं सिर्फ अधिक उपयोगी उत्तर-टॉप चाहता था, जिसे मैंने शुरू में याद किया था!
एंड्री Drozdyuk

11

आप भी उपयोग कर सकते हैं

% git config [--global] submodule.ignore dirty

submodule.ignore = dirtyअपनी .git/configफ़ाइल में सेट करने के लिए । --globalअपने में उपेक्षा ध्वज सेट करेगा ~/.gitconfigऔर आपके सभी रिपॉजिटरी पर लागू होगा। इसके बिना यह .git/configकेवल उस रेपो के लिए सेट होना चाहिए जो आप वर्तमान में हैं।

इस पर मुझे केवल एक ही दस्तावेज मिल सकता है submodule.<name>.ignoreजो कि git-config docs पर है । मैंने इसे .itmodules फ़ाइल से अपने ~ / .gitconfig में स्थानांतरित कर दिया है और यह अभी भी मेरे लिए काम कर रहा है।


@ PawełGo Pawcicki I पुष्टि कर सकता है कि यह Git 2.0.0 पर काम करता है।
सिरो सेंटिल्ली 郝海东 冠状 iro 事件

6

आपको जोड़ने की आवश्यकता है

उपेक्षा करना = गंदा करना

को .itmodules


आप इसे कहाँ जोड़ते हैं?
एंड्री Drozdyuk

@ डॉर्ज़ी आप इसे प्रत्येक सबमॉड्यूल के अनुभाग के तहत जोड़ते हैं जिसे आप अनदेखा करना चाहते हैं, जहां "पथ" और "यूआरएल" मान परिभाषित किए गए हैं।
jsdalton

2

तो git v1.7.2-rc2 में वही है जो मुझे चाहिए:

$ git diff --ignore-submodules = गंदा विक्रेता
# उत्पादन नही
$ गिट स्थिति --ignore-submodules = गंदा विक्रेता
# पर…
कुछ भी नहीं करने के लिए (स्वच्छ निर्देशिका काम कर)

अपनी खुद की गिट्टी का निर्माण

# get git
git clone git://git.kernel.org/pub/scm/git/git.git git
cd git
git checkout v1.7.2-rc2

# make git. beware of setting prefix
make configure
./configure --prefix=/usr/local
make
sudo make install

# you REALLY don't want to `make doc`, use this instead
sudo make quick-install-man
sudo make quick-install-html

1
मैं यहाँ सात Gits गिनती: git clone git://git.kernel.org/pub/scm/git/git.git git
डॉटनचेन

2

मैंने इस प्रश्न का यहाँ अधिक विस्तार से उत्तर दिया है।

बस दौडो

git config --global diff.ignoreSubmodules dirty

उन परिवर्तनों को अनदेखा करने के लिए स्थानीय कॉन्फ़िगरेशन विकल्प जोड़ना।


1

आप को जोड़ने के लिए नहीं चाहते हो सकता है ignore = dirtyके लिए .gitmodules, आप परिवर्तनों पर ध्यान नहीं की कामना के बारे में अधिक चयनात्मक होना चाहते हो सकता है।

ऐसा करने के लिए, पैटर्न जोड़ें .git/submodule_foo/bar/info/excludeजहां submodule_foo/bar/सबमॉडल का मार्ग है।

पैटर्न आपके द्वारा जोड़े गए पैटर्न के समान होते हैं .gitignore, जिसमें रूट सबमॉड्यूल डायरेक्टरी होती है। उदाहरण के लिए, यह पैटर्न सबमॉड्यूल में buildनिर्देशिका को अनदेखा करता है submodule_foo/bar/:

# in .git/submodule_foo/bar/info/exclude:
/build/

3
मुझे लगता है कि यह सबमॉडल के अंदर भी बदलाव को छिपा देगा। मैं केवल सबमॉड्यूल के बाहर होने वाले परिवर्तनों को छिपाना चाहता हूं। यह ठीक है अगर वे अंदर दिखाते हैं, जब मैं सक्रिय रूप से सबमॉड्यूल पर काम कर रहा हूं।
राफेल श्विकर्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.