2012-04-19 5 views
10

मैं जो करना चाहता हूं वह पहले से ही that question में वर्णित है। लेकिन मैं उस समस्या को एक व्यावहारिक और अधिक सामान्य तरीके से हल करना चाहता हूं। तो यूज-केस है निम्नलिखित:गिट में स्थानीय परिवर्तनों को असामान्य रखने के लिए व्यावहारिक वर्कफ़्लो क्या है?

  • मैं कई फ़ाइलों web.config, createDb.sql में या किसी अन्य लोगों में कई स्थानीय परिवर्तन
  • मैं करते हैं, उन फ़ाइलों को प्रतिबद्ध करने के लिए नहीं करना चाहता क्योंकि परिवर्तन अपने स्थानीय के लिए विशिष्ट हैं मशीन केवल
  • उन फ़ाइलों संस्करण नियंत्रित किया जाना चाहिए और इसके अलावा परिवर्तन बहुत अक्सर उन्हें (विशेष रूप से एसक्यूएल स्क्रिप्ट) में से कुछ के बने होते हैं, इसलिए मैं उन फ़ाइलों
  • मुझे क्या करना प्रतिबद्ध करने के लिए चाहते हैं के लिए अपडेट प्राप्त करना चाहते सब अन्य फ़ाइलों
  • मुझे क्या करना घर्षण के बिना है कि, एक आदेश में सक्षम होना चाहते हैं (का उपयोग कर आलीशान-Git, तो powershell का स्वागत है)

लिंक्ड का हल git add -p उपयोग करने के लिए कहा और कहा कि नहीं है व्यावहारिक, यह हर समय मैन्युअल रूप से चुनने के लिए उबाऊ है या शायद ऐसा करने का एक और सुविधाजनक तरीका है?

उदाहरण के लिए, निम्न में से एक काम कर सकता था:

  • अगर वहाँ उन्हें सूचकांक, git -add -A -EXCEPT web.config crateDb.sql की तरह कुछ में जोड़ने से पहले फ़ाइलों है कि मेरे काम की नकल कर रहे हैं फिल्टर करने के लिए की क्षमता है। तब मैं उस पर एक गिट उपनाम मैप कर सकता हूं और यही वह है।
  • यदि स्टैश को लागू करने की क्षमता है। मेरा मतलब है कि काम करने वाली प्रतिलिपि में एक विशिष्ट छिद्र में निहित परिवर्तनों को हटाना है। तो मुझे प्रत्येक प्रतिबद्धता से पहले git stash -deapply जैसे कुछ भी करना होगा जो ठीक है।

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

कोई विचार?

+0

परिवर्तन करने के अलावा आप उन फ़ाइलों को "संस्करण नियंत्रण" कैसे कर सकते हैं? गिट में, _is_ स्थानीय, और _push_ अन्य कंप्यूटर/रिपो को प्रभावित करता है। मेरे लिए, यह एक बेहतर समाधान की तरह गंध करता है [यह] (http://stackoverflow.com/questions/6009/how-do-you-deal-with-configuration-files-in-source-control) जैसा कुछ है। –

+0

मेरे पास कॉन्फ़िगरेशन फ़ाइलों के लिए एक बेहतर समाधान है - [NConifig] (https://github.com/Yegoroff/NConfig), लेकिन समस्या यह है कि मेरे पास केवल कॉन्फ़िगरेशन फ़ाइलें नहीं हैं। – Restuta

उत्तर

10

आप अपने Git से पहले निम्न प्रतिबद्ध करने का प्रयास कर सकते हैं:

git update-index --assume-unchanged web.config crateDb.sql 

Git मदद से:

--assume-अपरिवर्तित

--no-assume- अपरिवर्तित

जब ये झंडे निर्दिष्ट हैं, पथों के लिए दर्ज ऑब्जेक्ट नाम अपडेट नहीं किए गए हैं। इसके बजाय, इन विकल्पों को सेट किया गया है और पथों के लिए "अपरिवर्तित" मान को अनसेट करें। जब "मान लें अपरिवर्तित" बिट चालू है, तो गिट संभावित संशोधनों के लिए काम कर रहे पेड़ फ़ाइलों की जांच करना बंद कर देता है, इसलिए जब आप कार्यरत पेड़ फ़ाइल को बदलते हैं तो आपको गिट को बताने के लिए मैन्युअल रूप से बिट को अनसेट करना होगा। lstat (2) सिस्टम कॉल (उदा। सीआईएफ) बहुत धीमी गति से फाइल सिस्टम पर एक बड़ी परियोजना के साथ काम करते समय यह कभी-कभी सहायक सहायक होता है।

यह विकल्प भी एक मोटे फ़ाइल स्तर तंत्र के रूप में को उपेक्षा ट्रैक किए गए फ़ाइलों में अप्रतिबद्ध परिवर्तन (क्या .gitignore ट्रैक न किए गए फ़ाइलों के लिए करता है के लिए समान) का इस्तेमाल किया जा सकता है। गिट विफल हो जाएगा (गहराई से) यदि इस सूचकांक में इस फ़ाइल को संशोधित करने के लिए की आवश्यकता है जब एक प्रतिबद्धता में विलय हो; इस प्रकार, माना जाता है कि अनुमानित अनचाहे फ़ाइल अपस्ट्रीम बदल दी गई है, तो आपको मैन्युअल रूप से स्थिति को संभालने के लिए की आवश्यकता होगी।

+0

उसके बाद कैसे गिट व्यवहार करेगा? क्या यह अभी भी उन फ़ाइलों को ट्रैक करेगा? अगर मुझे एक अपडेट मिलेगा जो होगा? – Restuta

+0

+1 यह समस्या हल करता है। – ralphtheninja

+1

@Restuta फ़ाइलों को अभी भी गिट द्वारा ट्रैक किया जाएगा, लेकिन गिट अस्थायी रूप से उन्हें बदले में नहीं बदलेगा, भले ही वे बदल गए हों। तो गिट स्टेटस इत्यादि बदली जा रही फाइलों की रिपोर्ट नहीं करेगा। कमांड को पूर्ववत करने के लिए --no-assume-अपरिवर्तित का उपयोग करें और फिर से परिवर्तनों के बारे में गिट की देखभाल करें। – ralphtheninja

संबंधित मुद्दे