2009-09-24 5 views
22

में सौंदर्य कोड परिवर्तनों का प्रबंधन करना मुझे लगता है कि मैं अपने स्रोत कोड में बहुत से छोटे बदलाव करता हूं, अक्सर ऐसी चीजें जिनके पास लगभग कोई कार्यात्मक प्रभाव नहीं होता है।गिट

  • रिफाइनिंग या टिप्पणी को सही: उदाहरण के लिए।
  • एक और प्राकृतिक पढ़ने के क्रम के लिए कक्षा के भीतर फ़ंक्शन परिभाषाओं को स्थानांतरित करना।
  • पठनीयता के लिए कुछ घोषणाओं को स्थानांतरित करना और अस्तर बनाना।
  • एक से अधिक लाइनों का उपयोग करके कुछ को तोड़ना।
  • टिप्पणी-आउट कोड का पुराना टुकड़ा हटा रहा है।
  • कुछ असंगत सफेद जगह सुधारना।

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

मुख्य समस्या यह है कि इस प्रकार के परिवर्तन अप्रत्याशित हैं। अगर मैं इन्हें प्रतिबद्ध करना चाहता हूं तो संदेश "माइनर कोड सौंदर्य परिवर्तन" के साथ बहुत कुछ होगा। क्योंकि, दूसरा मैं इस तरह की प्रतिबद्धता करता हूं, मुझे एक और समान समस्या दिखाई देती है। जब मैं मामूली परिवर्तन करता हूं, एक महत्वपूर्ण परिवर्तन करता हूं, और फिर एक और मामूली परिवर्तन करता हूं तो मुझे क्या करना चाहिए? मैं तीन मामूली परिवर्तनों को एक प्रतिबद्धता में विलय करना चाहता हूं। यह git status में संशोधित फ़ाइलों के रूप में भी परेशान करने वाली फ़ाइलों को देख रहा है जब परिवर्तन मुश्किल से मेरा ध्यान वारंट करता है। मुझे git commit --amend के बारे में पता है, लेकिन मुझे यह भी बुरा व्यवहार है क्योंकि यह मेरे रेपो को रिमोट के साथ असंगत बनाता है।

+1

यह सभी स्रोत नियंत्रण प्रणालियों के लिए एक समस्या है। मैं अभी तक एक सिस्टम में निर्मित एक जवाब में नहीं आया है। – ChrisF

+4

यदि आप स्थानीय शाखाएं रखते हैं जिन्हें आपने पैच को कभी भी पुश/सबमिट नहीं किया है (उदाहरण के लिए कॉस्मेटिक शाखा) तो चीजें - प्रतिबद्ध 'और' रीबेज --इंटरएक्टिव 'जैसी चीजें (जो पुन: व्यवस्थित, संपादित और स्क्वैश कर सकती हैं) अचानक संभावित रूप से हैं अच्छा अभ्यास - वे आपके विकास इतिहास को क्लीनर बना सकते हैं! – Cascabel

+0

Mercurial –

उत्तर

15

एक तरफ मुझे नहीं लगता कि मामूली रूप से मामूली परिवर्तन कुछ भी या किसी के लिए बहुत नुकसान पहुंचाते हैं। मैं हमेशा नाबालिग कॉस्मेटिक परिवर्तन तुरंत प्रतिबद्ध है और हमारी टीम में, हम सहमत हुए हैं कि हम सिर्फ हमारे लिए प्रतिबद्ध संदेश में शब्द कॉस्मेटिक का उपयोग करें और बस इतना ही।

जो मैं सिफारिश नहीं करता हूं वह अन्य परिवर्तनों के साथ सौंदर्य प्रसाधनों का एक साथ काम कर रहा है !!

दूसरी ओर, अगर यह आप के लिए एक समस्या है और आप कुछ मैं कॉस्मेटिक सत्र जहाँ आप सूची आप एक बार में उल्लेख से चीजों के सभी प्रकार को ठीक कर सुझाव है कि परिवर्तन करना चाहते हैं। यह केवल एक निश्चित समय पर सौंदर्य प्रसाधनों पर ध्यान केंद्रित करने के लिए और अधिक कुशल हो सकता है। अन्यथा कॉस्मेटिक परिवर्तन एक procrastinational गतिविधि बन सकता है।

4

मुझे नहीं लगता कि आपको उन्हें अन्य "असली" परिवर्तनों के साथ शामिल करना चाहिए। ऐसा करने से शाखाओं को विलय करते समय परिवर्तनों की समीक्षा करना मुश्किल हो जाता है।

शायद इन छोटी परिवर्तनों को अपनी शाखा में रखने का आपका विचार योग्यता है।

जब मैं लाज़िमी उपयोग कर रहा था (साथ यह कई changelists है) मैं इन संपादन एक अलग परिवर्तन सूची में रख सकता है जब तक मैं था "पर्याप्त" में एक चेक वारंट। जाँच में एक से अधिक फ़ाइलों होते हैं और प्रत्येक फ़ाइल एकाधिक लेआउट हो सकता था परिवर्तन लेकिन कोई "असली" परिवर्तन नहीं।

+1

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

5

मुझे लगता है कि आप बेहतर के साथ व्यक्तिगत रूप से इन परिवर्तनों के लिए प्रतिबद्ध होना चाहिए संदेशों के लिए प्रतिबद्ध। 'मामूली कोड सौंदर्य परिवर्तन' के बजाय। आप इस तरह के 'एक्स ध्यान में रखते हुए एक्स खंड में हेडर के बदल दिया रिक्ति' के रूप में कुछ लिखना चाहिए।

है कि आप किसी भी तरह से चोट नहीं होगा।

7

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

+1

आप एक ही प्रतिबद्धता में अस्थिर परिवर्तनों को पुन: व्यवस्थित करने और स्क्वैश करने के लिए "git rebase -i " का उपयोग कर सकते हैं: http: // www।kernel.org/pub/software/scm/git/docs/git-rebase.html#_interactive_mode –

0

मैं उन्हें अलग रखने और उस पर चिपके रहने का सुझाव देता हूं ताकि कम से कम अन्य डेवलपर्स उन्हें बिना किसी डर के मर्ज कर सकें। :-) मेरे पास आपके द्वारा वर्णित करने की प्रवृत्ति भी है।

एक और सुझाव है कि कोड के लिए मानकीकृत प्रारूपण को परिभाषित करना और सहेजने या चेकइन पर कोड को स्वचालित रूप से प्रारूपित करने के लिए अपनी आईडीई या कुछ अन्य प्रक्रिया (बिल्ड/चेकइन) का उपयोग करना है। इसके साथ ही यदि आप एक विद्रोही हैं--) लेकिन फिर भी जब आप चेक इन होते हैं तो सभी कोड समान दिखते हैं।

मुझे लगता है कि गिट में प्री-चेकिन हुक को परिभाषित करने की क्षमता है, लेकिन चींटी लक्ष्य, मेवेन प्लग-इन और आईडीई फ़ंक्शंस/प्लगइन्स भी हैं जो स्वचालित रूप से आपके स्वरूपण तरीके से स्वचालित स्वरूपण करेंगे।

3

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

> git checkout dev # branch for work 
>> ... do some stuff 
> git commit -am 'cosmetic only 1' 
>> ... do some more stuff 
> git commit -am 'cosmetic stuff I missed last time' 
>> ... do some real stuff 
> git commit -am 'real work' 
> git checkout master && git pull && git checkout dev 
    # optional, if you repo is out of date 
> git rebase --interactive master 

, और उन्हें together-- गठबंधन आप क्या चाहते हैं। फिर अंत में:

> git checkout master && git merge dev && git push && git checkout dev 

तो रहस्य हैं:

  • Git के आसानी से एक शाखा पर काम करने की क्षमता
  • अक्सर
  • Git के सिस्टम में पहले से ही प्रतिबद्ध संपादित करने की क्षमता में जाँच की Git की सुविधा

ईमानदार होने के लिए, मैं आमतौर पर प्रतिबद्धता लॉग के बारे में चिंता नहीं करता हूं। मैं इस इतिहास को इस तरह के रखरखाव के प्रयास के लिए शायद ही कभी इतिहास के माध्यम से खोदता हूं।

बीटीडब्ल्यू मुझे यकीन है कि यदि आप शाखा पर काम नहीं करते हैं तो ऐसा करने का एक तरीका है, लेकिन मुझे यह नहीं पता। शाखा पर काम करने के लिए यहां एक संदर्भ दिया गया है: http://osteele.com/archives/2008/05/my-git-workflow