मैगिट दो हंक में विभाजित हंक


34

वहाँ MAGIT का उपयोग कर बंटवारे जिसे के बारे में इतने पर एक सवाल है, और यह देखते हुए दो समाधान या तो मंच क्षेत्र (एक क्षेत्र, हिट चरण निशान), या का उपयोग कर हटना / सब जिसे विकसित करने के लिए कर रहे हैं +और -। मैं उसके बाद नहीं हूँ।

मैगिट की स्थिति बफर में, मैं एक हंक को दो हिस्सों में विभाजित करना चाहता हूं, बिंदु पर, या कम से कम बिंदु के आसपास की रेखाओं पर।

इसे चालू करना (मेरे ख़राब फ़ार्मेट को बहाना बनाना)

@@ blah blah blah
- foo
+ bar
+ baz
+

में

@@ blah blah
- foo
+ bar

@ blah blah
+ baz

जब बात बार पर होती है।

मंशा:

  • bazएक डिबग स्टेटमेंट होने के नाते, इसलिए मैं इसे fooऔर barइससे छुटकारा पाने के बिना कमिटमेंट से ड्रॉप करना चाहूंगा ।

  • barऔर bazकेवल आंशिक रूप से संबंधित होने के नाते, जिसका अर्थ है कि उनके परिवर्तन समान प्रतिबद्ध में नहीं होने चाहिए।

  • barबड़ा है और bazछोटा है, जिससे हंक को चुनने के बजाय विभाजित करना बहुत आसान हैbar

  • अंतिम बिंदु के समान, मान लें कि 20 लाइन कमिट में मध्य में एक ही लाइन है जिसका मंचन नहीं किया जाना चाहिए। इस क्षेत्र के उपयोग की तुलना में बीच में अनदेखी करने वाले शीर्ष और नीचे के दो हिस्सों को विभाजित और स्टेज करना आसान होगा।

  • उपरोक्त कभी-कभी तब उत्पन्न हो सकता है जब अलग-अलग प्रस्तुति को संशोधित करने से पहले और बाद में कुछ अलग हो जाएगा, और बीच में कुछ अनहेल्दी होगा। जैसे

@@ line
- old_foo
+ random stuff
+ new foo

मैजिट में ऐसा कुछ भी नहीं है जो ऐसा कर सके। यह उससे भी अधिक है: मैगिट का डिज़ाइन मैगीट-स्टेटस के एक विशाल रीडिज़ाइन के बिना कोड करने के लिए संभवत: यह असंभव है।
रेमी

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

दिलचस्प है, 2 अलग-अलग गैर-आसन्न क्षेत्रों का चयन करना। +1
न्सकामी _

1
व्यक्तिगत रूप से मैं पूरे हंक को चरणबद्ध करूंगा, और फिर डिबग स्टेटमेंट को अनस्टेज करूंगा। (मेरे पूर्व प्रतिबद्ध हुक कैच डिबग बयान का मंचन किया, तो वहाँ मुझे एक करने का कोई खतरा नहीं है।)
फिल्स

1
मुझे मदद करने के लिए मैगिट के बारे में पर्याप्त नहीं पता है, लेकिन मैं सिर्फ यह बताना चाहता हूं कि Emacs के विधा-मोड में कमांड है diff-split-hunkजो कि बस करता है। IOW आपका अनुरोध diff-split-hunkमैगिट-स्टेटस बफर से उपयोग (या कुछ समतुल्य) करने के तरीके के लिए है ।
स्टीफन

जवाबों:


17

जैसा कि ऊपर की टिप्पणियों में उल्लेख किया गया है, मैगिट कई हंक में एक हंक को विभाजित करने का समर्थन नहीं करता है जो उपयोग करके संभव है git diff -U<n>। ऐसा इसलिए है क्योंकि Magit डिफरेंसेस बनाने के लिए उस Git कमांड पर निर्भर करता है। यह परिवर्तन नहीं होने जा रहा है, मैगिट हमेशा Git से प्राप्त होने वाले अंतर का उपयोग करेगा जैसा कि है।

(वास्तव में मैगिट कुछ हेडर को स्ट्रिप करता है जो वास्तव में मनुष्यों के लिए प्रासंगिक नहीं है, लेकिन परिवर्तन लागू करते समय उन्हें पुनर्स्थापित करता है। लेकिन एक हंक -U<n>को अलग करने से जो समर्थन करता है वह पूरी तरह से अलग कहानी है, यह एक खरगोश छेद का नेतृत्व करेगा - एक कारण है कि Git "छोटे लोभी" की अनुमति नहीं देता है, यह उन्हें लागू करने में सक्षम नहीं होगा)।

जबकि मैगिट यहाँ प्रदर्शित के रूप में छोटे लोकों को प्रदर्शित करने का समर्थन नहीं करता है, यह हंक के कुछ हिस्सों को लागू करने का समर्थन करता है। जब क्षेत्र मचान करते समय सक्रिय होता है, तो केवल उस हिस्से को हंक लगाया जाता है।

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

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


47

आप मैगिट के साथ विखंडू को विभाजित कर सकते हैं।

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

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


3
IMO, यह स्वीकृत उत्तर होना चाहिए, क्योंकि यह अनुरोध को संतुष्ट करता है (और मुझे यह उत्तर कुछ समय में मिला है जब यह याद करने की कोशिश की जा रही है कि यह कैसे करना है)।
chaseadamsio

2
हाँ, इसे उत्तर के रूप में स्वीकार किया जाना चाहिए!
कोपीनिन्जा

3

यदि आप हंक के कुछ हिस्सों को छोड़ना चाहते हैं, तो हंक के भीतर उन पंक्तियों का चयन करें जिन्हें आप त्यागना चाहते हैं और x दबा रहे हैं ।

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