Git: फ़ाइल बफर से सीधे चयनित क्षेत्र को स्टेज करना संभव है?


14

मैगिट के साथ आप मैगिट स्टेटस बफर खोल सकते हैं, डिफ TABका विस्तार करने के लिए प्रेस (या RETएक अलग-अलग बफर को लाने के लिए), एक हंक के हिस्सों को चिह्नित करें और क्षेत्र को दबाएं sया uचरणबद्ध करें। बहुत अच्छे।

अगर यह संभव हो तो मैं जानना चाहता हूं:

  • एक फ़ाइल संपादित करें
  • फ़ाइल बफर के ठीक अंदर एक क्षेत्र, हंक या कई हंक का चयन करें
  • चरण / चयनित क्षेत्र या बिंदु के आसपास हंक को अस्थिर करना

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

@tarsius शायद मैं भ्रमित हूं, मेरे लिए एक ऐसा क्षेत्र है जिसे मैंने अभी बफर के अंदर चुना है, और हंक चयनित क्षेत्र है जो मंचन के लिए तैयार है। क्या मै गलत हु?
नूस्कामी _

2
"क्षेत्र" एक Emacs शब्द है, यह बिंदु और चिह्न के बीच की चीज है, अर्थात "चयन"। "हंक" एक गित शब्द है, यह उदाहरण के लिए "@@ -1,1 +1,1" से शुरू होता है और अगले ऐसे शीर्षक से ठीक पहले समाप्त होता है जो एक नया हंक शुरू होता है। मैगिट वर्तमान खंड (जो एक हंक अनुभाग हो सकता है) पर प्रकाश डालता है उसी तरह से Emacs आम तौर पर इस क्षेत्र पर प्रकाश डालते हैं, जिससे आपके भ्रम में योगदान हो सकता है।
तारसियस

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

@tarsius वास्तव में मेरा क्या मतलब है, मेरी अंग्रेजी बस तेज नहीं है।
नस्सकमी _

जवाबों:


11

नहीं, मैगिट उसका समर्थन नहीं करता है। भविष्य के संस्करण हालांकि हो सकता है। Git-Gutter अब इसका समर्थन करता है। आज्ञा का नाम है git-gutter:stage-hunk


हालांकि यह एक हंक मंच है, यह एक क्षेत्र मंच नहीं करता है।
ओसोडो

मुझे लगता है कि एक हंक को मंच देने के लिए एक बंधन बनाना सबसे अच्छा है, फिर दूसरे को अगले हंक, मंच पर कूदने और दोहराने के लिए। वहाँ भी एक पूरे बफर चरण के लिए एक रास्ता है, लेकिन उस बिंदु पर आप कमांड लाइन से भी कर सकते हैं। मुझे लगता है कि git-gutter + magit के साथ ब्लॉक स्तर पर कमिट करना सबसे अच्छा है। बड़े परिवर्तन गिट-नाली के लिए अनुकूल नहीं हैं।
दरोगांस

1

जैसा कि पहले उल्लेख किया गया है, git-gutter आपकी फ़ाइल में सीधे git जानकारी दिखाने के लिए डिज़ाइन किया गया एक एक्सटेंशन है, और वहाँ से संचालन करते हुए, जबकि magit diffs के संचालन पर ध्यान केंद्रित करता है।

यह सुविधा किसी भी समय जल्द ही गटर के लिए नियोजित नहीं है ( https://github.com/syohex/emacs-git-gutter/issues/91 )

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

निम्नलिखित एमएसीएस लिस्प फ़ंक्शन को वह करना चाहिए जो आप चाहते हैं। आप इसे कुछ चाबियों से बांधना चाह सकते हैं।

(defun my-git-stage-region ()
  (interactive)
  (let ((git-gutter:ask-p nil)
        (start (region-beginning))
        (end (region-end)))
    (save-excursion
      (goto-char start)
      (git-gutter:next-hunk 1)
      (while (< (point) end)
        (git-gutter:stage-hunk)
        ;; This is a hack to wait for git-gutter to finish
        ;; updating information (git-gutter kicks
        ;; of a process to update the diff information
        ;; and does not block)
        (while (get-buffer (git-gutter:diff-process-buffer (git-gutter:base-file)))
          (sit-for 0.05))
        (git-gutter:next-hunk 1)))))

नोट: यह हंक को विभाजित नहीं कर सकता है, हंक या तो पूरी तरह से मंचन किए गए हैं या बिल्कुल भी मंचित नहीं हैं। हालांकि git-gutter में अपेक्षाकृत छोटे हंक होते हैं, यही वजह है कि मैंने इस सुविधा को लागू किया।
आरएच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.