Git में फ़ाइल में परिवर्तनों को ट्रैक करना और अनदेखा करना कैसे रोकें?


1730

मैंने एक परियोजना का क्लोन तैयार किया है जिसमें कुछ .csprojफाइलें शामिल हैं । मुझे अपनी स्थानीय csprojफ़ाइलों की आवश्यकता नहीं है / जैसे Git द्वारा ट्रैक किया जा रहा है (या पैच बनाते समय लाया जा रहा है), लेकिन स्पष्ट रूप से परियोजना में उनकी आवश्यकता है।

मैंने *.csprojअपने LOCAL में जोड़ा है .gitignore, लेकिन फाइलें पहले से ही रेपो में हैं।

जब मैं git स्टेटस टाइप करता हूं, तो यह मेरे उन बदलावों को दिखाता है, csprojजिनमें मुझे ट्रैक रखने या पैच के लिए सबमिट करने में कोई दिलचस्पी नहीं है।

मैं अपने व्यक्तिगत रेपो से इन फ़ाइलों की "ट्रैकिंग" को कैसे निकालूं (लेकिन उन्हें स्रोत में रख सकता हूं ताकि मैं उनका उपयोग कर सकूं) ताकि मैं स्थिति में बदलाव नहीं देख पाऊं (या पैच बनाऊं)?

क्या इस स्थिति को संभालने का एक सही / विहित तरीका है?


18
एक बहुत ही उपयोगी सवाल है, लेकिन मुझे इस बात की उत्सुकता है कि आप .csprojफाइल में बदलाव क्यों ट्रैक नहीं करना चाहेंगे , जो कि किसी भी परियोजना का बहुत महत्वपूर्ण हिस्सा है। .csproj.userफ़ाइल या किसी भी फ़ाइल में परिवर्तन, जिसे .Publish.XMLमैं पूरी तरह से ट्रैक नहीं कर सकता, लेकिन मैं समझ सकता हूँ कि आप इसे क्यों ट्रैक नहीं करना चाहते .csproj...
ओवेन ब्लैकर

7
शायद वे एक अलग आईडीई का उपयोग करते हैं?
जरेट

3
विडंबना यह है कि मैं इस धागे के लिए आया था क्योंकि मैं एक रेपो से .suo फ़ाइलों को हटाने के लिए देख रहा हूं, लेकिन उन्हें स्थानीय रूप से रखें। पोस्टरिटी के लिए, .Net विकास के लिए आपको रेपो में .csproj फ़ाइलों को रखना पड़ता है और उन परिवर्तनों को हमेशा ट्रैक करना चाहिए जब तक कि आप अपने प्रोजेक्ट पर किसी अन्य डेवलपर्स के क्रोध को महसूस नहीं करना चाहते। : अगर कभी अनिश्चित, gitignore पर एक नज़र फ़ाइलों GitHub पर रेपो ले github.com/github/gitignore/blob/master/VisualStudio.gitignore
longda

1
@Cupcake, जिस प्रश्न से आप जुड़े हैं, वह इस एक के 15 दिन बाद लिखा गया था? शायद आपके मन में कोई और हो?
स्टीफनमुर्डोक

@marflar विहित प्रश्न जरूरी नहीं कि सबसे पुराने हैं, बस सबसे अच्छे वाले हैं। जिस से मैंने 20 उत्तर

जवाबों:


2127

git rm --cachedआप रिविजन कंट्रोल से हटाना चाहते हैं, बस प्रत्येक फाइल पर कॉल करना ठीक होना चाहिए। जब तक आपके स्थानीय अनदेखी पैटर्न सही हैं, तब तक आप इन फ़ाइलों को गिट स्थिति के आउटपुट में शामिल नहीं देखेंगे।

ध्यान दें कि यह समाधान रिपॉजिटरी से फ़ाइलों को हटा देता है, इसलिए सभी डेवलपर्स को फ़ाइल की अपनी स्थानीय (गैर-संशोधन नियंत्रित) प्रतियां बनाए रखने की आवश्यकता होगी

इन फ़ाइलों में परिवर्तन का पता लगाने से git को रोकने के लिए आपको इस कमांड का उपयोग करना चाहिए:

git update-index --assume-unchanged [path]

आप शायद क्या करना चाहते हैं: ( @ टेलर टेलर जवाब नीचे से )

  1. यह आपको बताने के लिए है कि आप फ़ाइल या फ़ोल्डर का अपना स्वतंत्र संस्करण चाहते हैं। उदाहरण के लिए, आप कॉन्फ़िगरेशन फ़ाइलों को ओवरराइट करना (या हटाना) नहीं चाहते हैं।

git update-index --skip-worktree <path-name>

पूरा उत्तर इस URL में दिया गया है: http://source.kohlerville.com/2009/02/untrack-files-in-we/


186
"git rm --cached <file>" वर्जन रिपॉजिटरी में रखते हुए, संस्करण नियंत्रण से <file> को हटा देगा। चाहे वह वही हो जो आप चाहते हैं ...
जैकब नारबस्की

51
लेकिन जब दूसरे रिपॉजिटरी को खींचेंगे, तो क्या उनकी खुद की * .csproj फाइल हटा दी जाएगी? क्योंकि अगर हम चाहते हैं कि फाइल अनट्रैक हो, लेकिन डिलीट नहीं हुई।
FMaz008

23
यदि आप किसी डायरेक्टरी की सभी फाइलों को हटाने की कोशिश कर रहे हैं, तो इसे git ls-files के साथ मिलाएं: git ls-files | xargs git rm --cached- जो कि किसी दिए गए डायरेक्टरी में git इंडेक्स से वास्तविक फाइलों को डिलीट किए बिना सबकुछ हटा देगा।
मार्को

129
git rm --cached -r <dir>एक फ़ोल्डर और उस पर सभी फ़ाइलों में पुनरावर्ती कार्य करता है।
क्रिस के

41
यह फ़ाइल को ट्रैक करना बंद कर देगा, इसे स्थानीय रूप से संरक्षित करेगा, लेकिन इसका कारण है कि जो भी खींचता है , उसके लिए इसे हटा दिया जाएगा
एडवर्ड न्यूवेल

249

यदि आप करते हैं git update-index --assume-unchanged file.csproj, तो git अपने आप ही परिवर्तनों के लिए file.csproj की जाँच नहीं करेगा: जो कि जब भी आप उन्हें बदलेंगे गिट स्थिति में आना बंद कर देंगे। तो आप अपनी सभी .csproj फ़ाइलों को इस तरह से चिह्नित कर सकते हैं- हालाँकि आपको मैन्युअल रूप से किसी भी नए को चिह्नित करना होगा जो अपस्ट्रीम रेपो आपको भेजता है। (यदि आप उन्हें अपने .gitignoreया में हैं .git/info/exclude, तो आपके द्वारा बनाए गए लोगों को नजरअंदाज कर दिया जाएगा)

मुझे पूरी तरह से यकीन नहीं है कि .csproj फाइलें क्या होती हैं ... अगर वे IDE कॉन्फ़िगरेशन की रेखाओं के साथ कुछ हैं (जैसे कि ग्रहण की -eclipse और .classpath फाइलें) तो मेरा सुझाव है कि उन्हें बस कभी भी स्रोत-नियंत्रित नहीं होना चाहिए। सब। दूसरी ओर, यदि वे निर्माण प्रणाली (मेकफाइल्स की तरह) का हिस्सा हैं, तो स्पष्ट रूप से उन्हें चाहिए --- और वैकल्पिक स्थानीय परिवर्तनों को लेने का एक तरीका (जैसे एक local.csproj a la config.mk से) उपयोगी होगा : बिल्ड को वैश्विक भागों और स्थानीय ओवरराइड में विभाजित करें।


8
csproj एक C # प्रोजेक्ट फ़ाइल है, जो आपके प्रोजेक्ट और अन्य कुछ कॉन्फ़िगरेशन में कौन सी फ़ाइलों को शामिल करती है, इस पर नज़र रखती है, यह प्रोजेक्ट के काम करने के लिए जरूरी स्रोत होना चाहिए
SparK

4
यह यहाँ एकमात्र सही उत्तर है! मैं वर्षों से @araqnids उत्तर का उपयोग कर रहा हूं और यह इस समस्या को हल करने के लिए अनुरोध के समान काम करता है।
NHDaly

कमांड के तर्क में 'फ़ाइल' उपसर्ग का क्या अर्थ है? यह सिर्फ क्यों नहीं है .csproj?
ग्रीनएसजेड

1
क्या कोई तरीका है जिससे आप यह पता लगा सकते हैं कि यह एक फाइल के लिए किया गया है, या यह रेपो में किन फाइलों के लिए किया गया है? मैं यह भूलकर थोड़ा घबरा गया कि मैंने ऐसा किया है, फिर सोच रहा था कि यह फाइल क्यों नहीं अपडेट हो रही है, बाद में!
ग्रीनएजजादे

4
@GreenAsJade: ऐसी git ls-files -vफ़ाइलों को दिखाएगा जिन्हें लोअरकेस संकेतक के साथ अपरिवर्तित माना जाता है (उदाहरण के लिए कैश्ड फ़ाइलों के लिए hसामान्य रूप से H)।
अमदन

237

3 विकल्प हैं, आप शायद # 3 चाहते हैं

1. यह आपके लिए स्थानीय फ़ाइल रखेगा, लेकिन जब वे खींचेंगे तो किसी और के लिए इसे हटा देंगे।

git rm --cached <file-name> या git rm -r --cached <folder-name>

2. यह अनुकूलन के लिए है, बड़ी संख्या में फ़ाइलों वाले फ़ोल्डर की तरह, एसडीके जो शायद कभी नहीं बदलेगा। यह परिवर्तन के लिए हर बार उस विशाल फ़ोल्डर की जाँच बंद करने के लिए गिट को बताता है, स्थानीय रूप से, क्योंकि इसमें कोई भी नहीं होगा। assume-unchangedसूचकांक रीसेट और फ़ाइल (रों) हो जाएगा ओवरराइट अगर वहाँ फ़ाइल / फ़ोल्डर के लिए नदी के ऊपर परिवर्तन कर रहे हैं (जब आप खींच)।

git update-index --assume-unchanged <path-name>

3. यह आपको बताने के लिए है कि आप फ़ाइल या फ़ोल्डर का अपना स्वतंत्र संस्करण चाहते हैं। उदाहरण के लिए, आप कॉन्फ़िगरेशन फ़ाइलों को ओवरराइट करना (या हटाना) नहीं चाहते हैं।

git update-index --skip-worktree <path-name>

यह जानना महत्वपूर्ण है कि गिट के साथ git update-index प्रचार नहीं होगा , और प्रत्येक उपयोगकर्ता को इसे स्वतंत्र रूप से चलाना होगा।


8
यह उत्तर सबसे पूर्ण है - यह प्रत्येक के प्रभाव के साथ विभिन्न समाधान प्रदान करता है। मैं जिस विशिष्ट मामले के साथ काम कर रहा हूं, वह एक कॉन्फिगर फाइल में एक पासवर्ड है। मैं एक टेम्पलेट फ़ाइल का प्रचार करना चाहता हूं फिर मेरी कॉपी में पासवर्ड जोड़ें। पासवर्ड के साथ कॉपी को नजरअंदाज किया जाना चाहिए और ओवरराइट नहीं किया जाना चाहिए।
bmacnaughton

1
मैं अपने स्थानीय में, 'फाइल्स-अपरिवर्तित' या 'स्किप-वर्कट्री' के लिए कौन सी फाइलें लागू कर सकता हूँ?
सुपावत पुसवन्नो

3
@SupawatPusavanno यह देखने के लिए कि आपने पहले कौन-सी फाइलें चुनी हैं, जो इस जवाब पर अपरिवर्तित या स्किप-वर्कट्री के लिए चुनी गई हैं। इस जवाब में देखें stackoverflow.com/questions/42363881/… - यह उपयोग करता है grepऔरgit ls-files
रयान टेलर

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

@RyanTaylor: मैंने पहले अपरिवर्तित मानने की कोशिश की है (काम नहीं किया है) और वर्कट्री कमांड को छोड़ दिया (काम नहीं किया), जब मैं git स्टेटस के साथ जांचता हूं कि फाइलें दिखाई नहीं दे रही हैं मतलब कमांड ने काम किया है। लेकिन जब मैं फिर से कोड it gives me error that your local changes would be overwrittenको उन 2 फाइलों में git ओरिजिन रेपो से खींचता हूँ तो इसका मतलब है कि यह सही नहीं है?
NeverGiveUp161

152

यह दो चरणों वाली प्रक्रिया है:

  1. फ़ाइल / फ़ोल्डर की ट्रैकिंग निकालें - लेकिन उन्हें डिस्क - उपयोग पर रखें

    git rm --cached 
    

    अब वे "बदले हुए" के रूप में नहीं दिखते हैं, लेकिन फिर भी दिखाते हैं

        untracked files in  git status -u  
    
  2. उन्हें इसमें जोड़ें .gitignore


56
नहीं, यह फ़ाइल को ट्रैकिंग से हटा देगा, इसे स्थानीय रूप से संरक्षित करेगा, लेकिन इसका कारण यह है कि जो भी खींचेगा, उसके लिए इसे हटा दिया जाएगा
एडवर्ड न्यूवेल

1
मेरे मामले में, मैंने गलती से एक फ़ोल्डर जोड़ा था जिसे मैं ट्रैक नहीं करना चाहता था, इसलिए मुझे यही चाहिए।
सन्नी

4
हां, यह वास्तव में पूछे गए प्रश्न का गलत उत्तर है - लेकिन यह संभवतः अधिकांश लोगों के लिए सही उत्तर है जो इस प्रश्न को खोज परिणामों (जैसे मेरे) में पाते हैं।
एंड्रयू स्पेंसर

95

स्वीकृत जवाब अभी भी मेरे लिए काम नहीं किया

मैंनें इस्तेमाल किया

git rm -r - कैश किया गया।

जोड़ देना।

git कमिट-मी "फिक्सिंग ।सिटीग्नोर"

यहां से जवाब मिला


यह लिंक बहुत उपयोगी है, विशेष रूप से
.gitignore

9
मैं 3 बार यहां लौटा हूं, उम्मीद है कि मैं अगली बार से पहले स्मृति को दे सकता हूं!
हैरी बोश

@ एडवर्ड नेवेल की टिप्पणी के रूप में उपरोक्त उत्तर में यहाँ भी लागू होता है: "यह फ़ाइल को ट्रैकिंग से हटा देगा, इसे स्थानीय रूप से संरक्षित करेगा, लेकिन इसे खींचने वाले किसी भी व्यक्ति के लिए हटा दिया जाएगा "।
Tojo

46

अपने .gitignore को भूल गए?

यदि आपके पास स्थानीय रूप से पूरी परियोजना है, लेकिन आपको अनदेखा करने के लिए आपको जोड़ना भूल गया है और अब कुछ अनावश्यक फ़ाइलों को ट्रैक कर रहा है तो इस कमांड का उपयोग सब कुछ हटाने के लिए करें

git rm --cached -r .

सुनिश्चित करें कि आप परियोजना की जड़ में हैं।

फिर आप सामान्य कर सकते हैं

जोड़ना

git add .

कमिट

git commit -m 'removed all and added with git ignore'

धक्का दें

git push origin master

निष्कर्ष

आशा है कि यह उन लोगों की मदद करता है जिन्हें अपने में परिवर्तन करना है .gitignoreया इसे एक साथ भूल गए हैं।

  • यह पूरा कैश निकाल देता है
  • अपने .itignore को देखता है
  • उन फ़ाइलों को जोड़ता है जिन्हें आप ट्रैक करना चाहते हैं
  • अपने रेपो को धक्का देता है

4
जब आप हटाने या जोड़ने पर बोल रहे हैं, तो आप भूल रहे हैं कि कब और कहाँ। ट्रैक सूची से हटाया जा रहा है? भंडार से? स्थानीय परियोजना स्थान से? खींचने पर हटाना? कमिट पर? धक्का पर? काश, यहाँ सभी लेखकों की समस्या एक जैसी होती।
गंगानुस

3
@ गैंग्नस मुझे नहीं लगता कि आप जिस किसी को भी स्पष्ट करने की कोशिश कर रहे हैं, क्योंकि वह पूरी तरह से स्पष्ट है कि फाइल को डिस्क या रिपॉजिटरी से हटाया नहीं जा रहा है। यह उत्तर आज्ञाओं के कालानुक्रमिक क्रम को निर्दिष्ट करता है। जैसा कि आपकी टिप्पणी से पता चलता है कि यह रहस्यमय या बीमार नहीं है।
एंथनी

@ एडवर्ड नेवेल की टिप्पणी के रूप में उपरोक्त उत्तर में यहाँ भी लागू होता है: "यह फ़ाइल को ट्रैकिंग से हटा देगा, इसे स्थानीय रूप से संरक्षित करेगा, लेकिन इसे खींचने वाले किसी भी व्यक्ति के लिए हटा दिया जाएगा "।
Tojo

26

जैसा कि अन्य उत्तरों में बताया गया है, चयनित उत्तर गलत है।

एक अन्य प्रश्न का उत्तर बताता है कि यह स्किप-वर्कट्री हो सकता है जिसकी आवश्यकता होगी।

git update-index --skip-worktree <file>

2
नहीं, वास्तव में नहीं: फ़ाइल को रिपॉजिटरी पर रखने के--skip-worktree लिए उपयोग किया जाता है लेकिन इसके परिवर्तनों को ट्रैक करना बंद कर देता है । जब आपका उत्तर कहता है: --स्किप-वर्कट्री उपयोगी है जब आप निर्देश देते हैं कि किसी विशिष्ट फ़ाइल को कभी भी न छूएं क्योंकि डेवलपर्स को इसे बदलना चाहिए
एर्डाल जी।

4
@ErdalG। बिल्कुल सही। प्रश्न के अनुसार, वे फ़ाइल में किसी भी बदलाव को अनदेखा करना चाहते हैं, लेकिन फ़ाइल को रेपो में रखें
the_new_mr

@The_new_mr से सहमत हैं, --assume-unchangedऔर --skip-worktreeसमान प्रभाव है लेकिन उनके उद्देश्य पूरी तरह से अलग हैं। भूतपूर्व व्यक्ति विशेष फ़ाइलों की जांच न करने के लिए git को बेवकूफ बनाकर प्रदर्शन को तेज करने के लिए है , जबकि बाद वाला विशेष फ़ाइलों पर भविष्य के परिवर्तनों को अनदेखा करने के लिए है , जो रनटाइम लेकिन आवश्यक फ़ाइलों के लिए उपयुक्त हैं।
विक्टर वोंग

22

आपके द्वारा जोड़े गए नियमों को बचाने के लिए कुछ समय के लिए .itignore का उपयोग कई फ़ाइलों / फ़ोल्डरों को हटाने के लिए किया जा सकता है

git rm --cached app/**/*.xml

या

git rm --cached -r app/widgets/yourfolder/

आदि


यह किसी भी संयोग में एक बहुत अच्छा समाधान कारण है जिसे आप चरण
cutiko

15

किसी फ़ाइल को मॉनिटर द्वारा रोकने के लिए

git update-index --assume-unchanged [file-path]

और इसे वापस उपयोग करने के लिए वापस

git update-index --no-assume-unchanged [file-path]

इसी तरह के उपयोग के मामलों का उल्लेख करने के लिए एक रेपो https://github.com/awslabs/git-secrets


1
टिप रीवरिंग एक जीवन रक्षक था, धन्यवाद!
हैमन सैमुअल

9

बहुत से लोग आपको उपयोग करने की सलाह देते हैं git update-index --assume-unchanged। वास्तव में, यह एक अच्छा समाधान हो सकता है, लेकिन केवल अल्पावधि में।

क्या आप शायद क्या करना चाहते हैं यह है: git update-index --skip-worktree

(तीसरा विकल्प, जो आप शायद नहीं चाहते हैं: git rm --cachedयह आपकी स्थानीय फ़ाइल रखेगा, लेकिन दूरस्थ रिपॉजिटरी से हटाकर चिह्नित किया जाएगा।)

पहले दो विकल्पों में अंतर?

  • assume-unchangedअस्थायी रूप से आपको फ़ाइल से संशोधनों को छिपाने की अनुमति है। यदि आप किसी फ़ाइल में किए गए संशोधनों को छिपाना चाहते हैं, तो फ़ाइल को संशोधित करें, फिर किसी अन्य शाखा को चेकआउट करें, आपको इसके no-assume-unchangedबाद किए गए संशोधनों का उपयोग करना होगा ।
  • skip-worktree आप अपने संशोधन के साथ जो भी शाखा चेकआउट करेंगे उसका अनुसरण करेंगे!

के मामले का उपयोग करें assume-unchanged

यह मानता है कि इस फ़ाइल को संशोधित नहीं किया जाना चाहिए, और जब आप कर रहे हैं तो आपको एक क्लीनर आउटपुट देता है git status। लेकिन जब दूसरी शाखा की जाँच की जाती है, तो आपको ध्वज को रीसेट करने की आवश्यकता होती है और इससे पहले परिवर्तनों को कम या कम करना चाहिए। यदि आप इस विकल्प को सक्रिय करते हैं, तो आपको संघर्षों को हल करना होगा और ऑटो मर्ज नहीं होगा। यह वास्तव में केवल संशोधनों को छुपाता है ( git statusआपको ध्वजांकित फ़ाइलों को नहीं दिखाएगा)।

मैं इसका उपयोग करना पसंद करता हूं जब मैं केवल एक ही संशोधन git commit -aसे संबंधित फाइलों ( ) का एक गुच्छा + के लिए ट्रैकिंग परिवर्तनों को रोकना चाहता हूं ।

के मामले का उपयोग करें skip-worktree

आपके पास एक सेटअप वर्ग है जिसमें पैरामीटर (जैसे पासवर्ड शामिल हैं) कि आपके दोस्तों को उनके सेटअप के अनुसार बदलना होगा।

  • 1: इस वर्ग का पहला संस्करण बनाएं, उन क्षेत्रों को भरें जिन्हें आप भर सकते हैं और दूसरों को खाली / अशक्त छोड़ सकते हैं।
  • 2: रिमोट सर्वर पर कमिट करें और उसे आगे बढ़ाएं।
  • 3: git update-index --skip-worktree MySetupClass.java
  • 4: अपने स्वयं के मापदंडों के साथ अपने कॉन्फ़िगरेशन वर्ग को अपडेट करें।
  • 5: दूसरे कार्य पर काम करने के लिए वापस जाएं।

आप जो भी संशोधन करेंगे वह शाखा का अनुसरण करेगा। चेतावनी: यदि आपके मित्र भी इस वर्ग को संशोधित करना चाहते हैं, तो उनके पास एक ही सेटअप होना चाहिए, अन्यथा उनके संशोधनों को दूरस्थ भंडार में धकेल दिया जाएगा। खींचते समय, फ़ाइल के दूरस्थ संस्करण को आपका ओवरराइट करना चाहिए।

पुनश्च: एक या दूसरे, लेकिन दोनों नहीं के रूप में आप अवांछनीय दुष्प्रभाव होगा। यदि आप किसी अन्य ध्वज को आज़माना चाहते हैं, तो आपको पहले वाले को अक्षम करना चाहिए।


7

आपके स्थानीय फ़ाइल / फ़ोल्डर में परिवर्तनों को ट्रैक न करने के लिए Git को बताने के लिए (जिसका अर्थ है कि git स्थिति इसमें परिवर्तन का पता नहीं लगाएगी), करें:

git update-index --skip-worktree path/to/file

और अपने स्थानीय संस्करण में परिवर्तनों को ट्रैक करने के लिए Git को एक बार फिर से बताएं (ताकि आप परिवर्तन कर सकें), करें:

git update-index --no-skip-worktree path/to/file

1

एक पंक्ति उत्तर git update-index --assume-unchanged [path]

जब भी आपके पास ऐसी कोई फ़ाइल हो, जिसका उपयोग केंद्रीय रेपो में हो और स्थानीय प्रतिनिधि भी। उस फ़ाइल में परिवर्तन करने की आवश्यकता हो, लेकिन केंद्रीय रेपो का मंचन / प्रतिबद्ध नहीं होना चाहिए। इस फ़ाइल को नहीं जोड़ा जाना चाहिए .gitignore। क्योंकि सिस्टम व्यवस्थापकों द्वारा पेश किए जाने पर फ़ाइल में नए परिवर्तन, वरिष्ठ डेवलपर्स को सभी स्थानीय प्रतिनिधि के बीच वितरित करने की आवश्यकता होती है।

सबसे अच्छा उदाहरण: DB कनेक्शन के लिए कॉन्फ़िगर फ़ाइल । एक केंद्रीय रेपो में, आपके पास एक उत्पादन DB सर्वर के मूल्यों के साथ सभी उपयोगकर्ता नाम, पासवर्ड, होस्ट, पोर्ट होंगे। लेकिन स्थानीय देव में, आपको केवल एक स्थानीय या किसी अन्य विकास डीबी सर्वर (कि आपकी टीम का सेटअप है) का उपयोग करना चाहिए। इस मामले में आप कॉन्फ़िगर फ़ाइल में परिवर्तन करना चाहते हैं लेकिन केंद्रीय रेपो के लिए प्रतिबद्ध नहीं होना चाहिए।

श्रेष्ठ


0

मैं मान रहा हूं कि आप पूछ रहे हैं कि किसी विशिष्ट फ़ोल्डर या बिन फ़ोल्डर में सभी फ़ाइलों को कैसे हटाया जाए , बल्कि प्रत्येक फ़ाइलों को अलग से चुनने के बजाय।

आप इस आदेश का उपयोग कर सकते हैं:

git rm -r -f /<floder-name>\*

सुनिश्चित करें कि आप उस निर्देशिका के मूल निर्देशिका में हैं।
यह कमांड उन सभी फाइलों को पुन: "डिलीट" कर देगा, जो बिन / या बिल्ड / फोल्डर में हैं। शब्द हटाने से मेरा मतलब है कि git यह दिखावा करेगा कि उन फ़ाइलों को "हटा दिया गया" है और उन फ़ाइलों को ट्रैक नहीं किया जाएगा। Git वास्तव में उन फ़ाइलों को हटाने की विधि में चिह्नित करता है।

यह सुनिश्चित कर लें कि आपके पास अपना .gitignore आने वाले कमिट के लिए तैयार है।
प्रलेखन: गिट rm


0

ऑपरेशन के आदेश के कारण समस्या हो सकती है। यदि आपने .gitignore को पहले संशोधित किया है, तो git rm --cached xxx, आपको इस समस्या का सामना करना जारी रखना पड़ सकता है।

सही समाधान solution

  1. git rm - कैशेड xxx
  2. .gitignore को संशोधित किया है

आदेश देने वाले!

संशोधन के बाद .itignore पुनः लोड करें!


0

मैं मान रहा हूं कि आप एक फ़ाइल को गिट से निपटने की कोशिश कर रहे हैं। उसके लिए मैं नीचे कमांड की सिफारिश करूंगा।

git update-index --assume-अपरिवर्तित

Ex - git अपडेट-इंडेक्स --assume-अपरिवर्तित .gitignore .idea / compiler.xml


0

एक निर्देशिका में सभी फ़ाइलों (एक निश्चित प्रकार के) में किसी भी परिवर्तन को अनदेखा करने के लिए, मुझे इनमें से कुछ दृष्टिकोणों को संयोजित करना था, अन्यथा यदि वे पहले से मौजूद नहीं थे तो फाइलें बनाई गई थीं।

नीचे में, "बहिष्कृत" उस निर्देशिका का नाम है जिसे मैं बदलाव नहीं देखना चाहता।

सबसे पहले, अपने परिवर्तन ट्रैकिंग कैश (अपनी फ़ाइल सिस्टम से निकाले बिना) से किसी भी मौजूदा नई फ़ाइलों को हटा दें।

git status | grep "new file:" | cut  --complement -d " " -f1-4 | grep "^excludedir" | xargs git rm --cache

आप उसी के साथ कर सकते हैं modified:renamed:थोड़ा और अधिक जटिल है, जैसा कि आपको ->नए फ़ाइल नाम के लिए पोस्ट बिट को देखना होगा , और पूर्व के ->रूप में वर्णित के लिए थोड़ा करना होगाdeleted: नीचे दिए गए करें।

deleted: फ़ाइलें थोड़ी अधिक जटिल साबित होती हैं, क्योंकि आप उस फ़ाइल के लिए अपडेट-इंडेक्स नहीं कर सकते हैं जो स्थानीय प्रणाली पर मौजूद नहीं है

echo .deletedfiles >> .gitignore
git status | grep "deleted:" | cut  --complement -d " " -f1-4 | grep "^excludedir" > .deletedfiles
cat .deletedfiles | xargs -d '\n' touch
cat .deletedfiles | xargs -d '\n' git add -f
cat .deletedfiles | xargs -d '\n' git update-index --assume-unchanged
cat .deletedfiles | xargs -d '\n' rm

ऊपर दी गई सूची में अंतिम कमांड आपके फाइल सिस्टम से फाइलों को फिर से हटा देगा, इसलिए बेझिझक इसे छोड़ दें।

फिर, उस डायरेक्टरी से ट्रैकिंग को ब्लॉक करें

git ls-files excludedir/ | xargs git update-index --skip-worktree
git update index --skip-worktree excludedir/

0

इस उत्तर में लगभग git कमांड-फ्री दृष्टिकोण दिया गया था :

प्रत्येक स्थानीय रेपो के लिए कुछ फाइलों को अनदेखा करना :

  1. ~/.gitignore_globalजैसे, द्वारा एक फ़ाइल बनाएँtouch ~/.gitignore_global आपके टर्मिनल में।
  2. Daud git config --global core.excludesfile ~/.gitignore_globalएक बार के लिए ।
  3. उस फ़ाइल / डायर पथ को लिखें जिसे आप अनदेखा करना चाहते हैं ~/.gitignore_global। उदाहरण के लिए modules/*.H, जिसे आपकी कार्यशील निर्देशिका में माना जाएगा $WORK_DIR/modules/*.H

एकल स्थानीय रेपो के लिए कुछ फ़ाइलों को अनदेखा करना :

  1. .git/info/excludeरेपो के भीतर फ़ाइल के लिए ऊपर तीसरा चरण करें , जो कि उस फ़ाइल / डायर पथ को लिखें जिसे आप अनदेखा करना चाहते हैं .git/info/exclude। उदाहरण के लिए modules/*.C, जिसे आपकी कार्यशील निर्देशिका में माना जाएगा $WORK_DIR/modules/*.C

0

/ .Ignignore को वर्तमान / भविष्य में लागू करें

यह विधि मानक .gitignore व्यवहार को लागू करती है, और मैन्युअल रूप से उन फ़ाइलों को निर्दिष्ट करने की आवश्यकता नहीं होती है जिन्हें अनदेखा करने की आवश्यकता होती है

--exclude-from=.gitignoreअब और उपयोग नहीं कर सकते : / - यहाँ अद्यतन विधि है:

सामान्य सलाह: एक साफ रेपो के साथ शुरू करें - सब कुछ प्रतिबद्ध, कार्यशील निर्देशिका या सूचकांक में लंबित कुछ भी नहीं है, और एक बैकअप बनाएं !

#commit up-to-date .gitignore (if not already existing)
#this command must be run on each branch
git add .gitignore
git commit -m "Create .gitignore"

#apply standard git ignore behavior only to current index, not working directory (--cached)
#if this command returns nothing, ensure /.git/info/exclude AND/OR .gitignore exist
#this command must be run on each branch
git ls-files -z --ignored --exclude-standard | xargs -0 git rm --cached

#optionally add anything to the index that was previously ignored but now shouldn't be:
git add *

#commit again
#optionally use the --amend flag to merge this commit with the previous one instead of creating 2 commits.

git commit -m "re-applied modified .gitignore"

#other devs who pull after this commit is pushed will see the  newly-.gitignored files DELETED

यदि आपको शाखा की प्रतिबद्ध इतिहास से नई-उपेक्षित फ़ाइलों को शुद्ध करने की आवश्यकता है या यदि आप नहीं चाहते हैं कि नई-उपेक्षित फ़ाइलों को भविष्य के पुल से हटा दिया जाए , तो इस उत्तर को देखें ।


-1

लंबे समय तक खोज करने के बाद, ऐसा करने का तरीका खोजें। alias a git कमांड इन .gitconfigएंड्रॉइड स्टूडियो प्रोजेक्ट like। चेकआउट ब्रांच से पहले and कॉन्फिगरेशन फाइल रिवर्ट करें और फिर चेकआउट ब्रांच यूज sedकॉन्फिग फाइल को मेरे लोकल कॉन्फिगर करने के बाद it छोड़ दें । checkoutandmodifylocalproperties = !git update-index --no-skip-worktree local.properties && git checkout local.properties && git checkout $1 && git update-index --skip-worktree local.properties && sed -i '' 's/.*sdk.dir.*/sdk.dir=\\/Users\\/run\\/Library\\/Android\\/sdk/g' local.properties && :

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