2010-05-18 20 views
48

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

मैंने फ़ाइल को .hgignore फ़ाइल में जोड़ने का प्रयास किया, लेकिन चूंकि फ़ाइल को ट्रैक किया गया है, इसे अनदेखा नहीं किया जाता है। यह ठीक है और अन्य परिस्थितियों में अच्छा है, लेकिन मुझे आश्चर्य है कि क्या ऐसा कुछ है जो मैं यहां कर सकता हूं?

उत्तर

23

फ़ाइल टेम्पलेट का उपयोग करना निश्चित रूप से सबसे अच्छा समाधान है। उदाहरण के लिए, यदि आप एक database.ini फ़ाइल है, एक database.ini.template फ़ाइल के लिए प्रतिबद्ध और .hgignore

+0

अनदेखी करने के लिए यह है कि मैं क्या है समाप्त हो गया :) – Svish

+0

मुझे एहसास है कि यह अब बहुत पुराना है, लेकिन बस मामले में - क्या आपके पास एक स्थापित स्क्रिप्ट होगी जो सभी टेम्पलेट फ़ाइलों को उनके कामकाजी फ़ाइल नाम पर कॉपी करेगी? – Nick

+0

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

8

कोई सही मायने में स्वचालित प्रक्रिया है, लेकिन आप hg commit पर -X विकल्प (यह SO question के रूप में) की कोशिश कर सकते हैं:

% hg stat 
M myfile 
% hg commit -X 'myfile' 

(अन्य समाधान shelve or hq शामिल हो सकता है)

बहरहाल, यह नहीं है "सही" समाधान। मैं नहीं बल्कि संस्करण की सिफारिश करेंगे:

  • एक फ़ाइल टेम्पलेट
  • एक स्क्रिप्ट (जिसे आप संशोधित लेकिन कुल मिलाकर अनदेखा कर सकते हैं)
2

आमतौर पर आप एक संदर्भ में जाँच करेगा अंतिम फ़ाइल उत्पन्न करने में सक्षम फ़ाइल की प्रतिलिपि बनाएं और इसे ट्रैक करें, फिर डेवलपर स्थानीय विकास के लिए इसकी प्रतिलिपि बनाते हैं, आप वास्तव में डेवलपर्स को अपने पर्यावरण के लिए स्रोत नियंत्रित फ़ाइल को संपादित नहीं करना चाहते हैं।

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

27

में database.ini उपेक्षा आप हमेशा फ़ाइल को अनदेखा करना चाहते हैं, तो आप अपने .hg/hgrc विन्यास को commit के लिए एक डिफ़ॉल्ट के रूप में -X विकल्प जोड़ सकते हैं फ़ाइल:

[defaults] 
commit = -X program.conf 
+3

चलाने के लिए फ़ाइल वास्तव में वैकल्पिक नहीं है, यह वास्तव में एक अच्छा विचार है , जब तक कि आप विलय करने का प्रयास न करें। विलय करने पर, आपको फ़ाइलों या पैटर्न निर्दिष्ट करने की अनुमति नहीं है। तो उसके साथ आपके '.hgrc' में, ऐसा लगता है कि पहले संपादन किए बिना किसी भी विलय को संभवतः' .hgrc' संपादित करना संभव नहीं है। क्या किसी के पास इसका समाधान है? – Yitz

+2

आपने इस उम्र पहले @Yitz से पूछा था, लेकिन इसके सहायक होने पर, मेरे द्वारा उपयोग किए जाने वाले त्वरित और गंदे फ़िक्स का उपयोग एक त्वरित बैच स्क्रिप्ट होना है जो रेपो hgrc को रास्ते से बाहर ले जाता है, प्रतिबद्ध करता है और इसे वापस ले जाता है। यह स्पष्ट रूप से केवल काम करने जा रहा है यदि आपके एचजीआरसी में कुछ और नहीं है जो वहां होना चाहिए। –

+0

@yitz मुझे आश्चर्य है कि यह कारण आपके लिए काम नहीं करता है क्योंकि फ़ाइल को hgrc कहा जाता है, नहीं .hgrc? – teaman

3

आप TortoiseHG का उपयोग कर रहे हैं, तो रेपो के लिए सेटिंग खोलने, कमिट अनुभाग पर जाएँ (बाईं ओर नीचे 2 आइकन) & फ़ाइल नाम (रों) जोड़ने के ऑटो के लिए पर सूची को बाहर निकालें दाएं (~ सूची में नीचे से तीसरा)।

से http://tortoisehg.bitbucket.io/manual/0.9/commit.html

+1

जब आप ऐसा करते हैं और प्रतिबद्ध UI चलाते हैं, तो बहिष्कृत फ़ाइल को प्रतिबद्ध फ़ाइल सूची (स्वचालित रूप से) में अनचेक किया जाएगा, और डीआईएफएफ अंधेरे भूरे रंग में होगा। अच्छा लगा। –

+0

मैं इसे काम पर नहीं ला सकता, मैं TortoiseHg 3.3.3 का उपयोग कर रहा हूं। मैं फ़ाइल नाम, पूर्ण पथ, आंशिक फ़ाइल नाम * के साथ जोड़ता हूं - यह हमेशा प्रतिबद्ध यूआई में चेक किया जाता है? – gakera

+0

यदि यह पहले से ट्रैक किया गया है (पहले किया गया है) तो इसे अनदेखा करने से यह प्रभावित नहीं होगा, आपको इसे "भूलना" होगा। –

12

हम इस के लिए एक एक्सटेंशन exclude बुलाया लिखा था। यह स्वचालित रूप से -X विकल्प उन आदेशों पर विकल्प जोड़ देगा जो उन्हें समर्थन देते हैं - इसलिए hg status और hg commit संशोधित फ़ाइल नहीं देखेंगे। यह .hgignore फ़ाइल की तरह, आपके भंडार की जड़ से .hgexclude फ़ाइल को पढ़कर काम करता है। आप फ़ाइलों है कि आप वहाँ बाहर करना चाहते जोड़ें:

syntax: glob 
db.conf 

विस्तार काफी अच्छी तरह से काम करता है, लेकिन वहाँ एक ज्ञात स्थिति है जहाँ यह विफल है: मर्ज और है कि किसी मर्ज (इस विकि पर प्रलेखित है) इस प्रकार के लिए प्रतिबद्ध ।इसे सुधारने की आवश्यकता होगी ताकि यह संशोधनों को एक अस्थायी फ़ाइल में सहेज सके और फिर उन्हें बाद में बहाल कर सके। अगर आपको इस सुविधा की ज़रूरत है तो कृपया संपर्क में रहें।

-2

यह unintuitive लग सकता है, लेकिन:

hg rm -Af [file] 

दो झंडे एक साथ का दावा है कि फ़ाइल हटा दिया गया है, और परिवर्तन के लिए मजबूर किया जाना चाहिए कि (बजाय हटाने के लिए मजबूर किया जाना चाहिए, क्योंकि मदद से पता चलता है) । ए (बाद) और एफ (बल) झंडे के लिए सहायता और दस्तावेज स्पष्ट रूप से 100% सटीक नहीं हैं।

Mercurial 2.0 में मेरे लिए काम किया, इस चेतावनी के साथ कि संग्रह कमांड में फ़ाइल शामिल नहीं है, या तो। यदि अन्य डेवलपर रेपो क्लोन कर रहे हैं, हालांकि, यह कोई समस्या नहीं होनी चाहिए। उन्हें मूल संस्करण मिलेगा, और इसे अपनी कार्यशील निर्देशिका से हटाया नहीं जाना चाहिए।

से: https://www.mercurial-scm.org/pipermail/mercurial/2008-June/019671.html

+2

यह वास्तव में काम नहीं करता है: फ़ाइल को संस्करण नियंत्रण से हटा दिया गया है जिसका अर्थ है कि यह एक नए क्लोन का हिस्सा नहीं है। अगर आप 'एचजी अपडेट' करते हैं तो इसे भी हटा दिया जाएगा : इसे सामान्य 'एचजी हटाने' की तरह सोचें जो कि आपके ** कामकाजी प्रतिलिपि में फ़ाइल को पीछे छोड़ने के लिए होता है। अन्य क्लोन उनके लिए '--after' और' --force' झंडे "को नहीं देखते हैं यह सिर्फ एक सामान्य निष्कासन है और इसलिए जब वे अद्यतन करते हैं तो फ़ाइल हटा दी जाती है। –

1

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

मुझे आपकी जैसी ही समस्या थी, मैं फ़ाइल हर प्रतिबद्धता पर भी दिखता रहता हूं-हालांकि यह पहले से ही अनदेखा सूची में है। मैंने फोर्जेट कमांड की कोशिश की और यह चाल चल गई।

+0

उत्कृष्ट! बहुत मदद मिली! – icesar

2

आप hg forget आज़मा सकते हैं। अधिक जानकारी के लिए, official manual about the same command देखें। यह मेरे लिए काम किया।

मुझे लगता है, कुछ इस तरह मूल प्रश्न के सही जवाब के करीब है मर्क्युरियल: कैसे आदि एक टेम्पलेट का सुझाव दे एक ट्रैक किए गए फ़ाइल में परिवर्तन करने के बजाय दूसरों,

+3

यह उत्तर आयरिश के उत्तर के बराबर है। इसके साथ समस्या यह है कि 'hg forget' फ़ाइल की मौजूदा सामग्री को हटा देता है भंडार, जिसे ओपी नहीं चाहता था। – Brilliand

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