Git: เป็นไปได้หรือไม่ที่จะจัดพื้นที่ที่เลือกโดยตรงจากบัฟเฟอร์ไฟล์?


14

ด้วย Magit คุณสามารถเปิดบัฟเฟอร์สถานะ magit กดTABเพื่อขยาย diff (หรือRETเพื่อแสดงบัฟเฟอร์ diff แยกต่างหาก) ทำเครื่องหมายส่วนต่าง ๆ ของก้อนใหญ่และกดsหรือuเพื่อหยุดเวที / ไม่แสดงพื้นที่ ดีจริงๆ.

ฉันอยากรู้ว่าเป็นไปได้หรือไม่:

  • แก้ไขไฟล์
  • เลือกภูมิภาคก้อนใหญ่หรือก้อนหินหลายอันในบัฟเฟอร์ไฟล์
  • เวที / unstage ภูมิภาคที่เลือกหรือก้อนใหญ่รอบจุด

คุณดูสับสนเล็กน้อยเกี่ยวกับก้อนใหญ่กับภูมิภาค ฉันได้แก้ไขคำอธิบายของคุณในสิ่งที่วิเศษและคำถามของคุณ ฉันอาจเดาไม่ถูกต้องในสิ่งที่คุณตั้งใจจะถาม
Tarsius

@tarsius บางทีฉันอาจจะสับสนสำหรับฉันภูมิภาคคือสิ่งที่ฉันเพิ่งเลือกไว้ในบัฟเฟอร์และก้อนใหญ่เป็นพื้นที่ที่เลือกพร้อมสำหรับการจัดฉาก ฉันผิดหรือเปล่า?
Nsukami _

2
"ภูมิภาค" เป็นคำของ Emacs มันเป็นสิ่งที่อยู่ระหว่างจุดและเครื่องหมายนั่นคือ "การเลือก" "Hunk" เป็นคำ Git มันเริ่มต้นด้วยเช่น "@@ -1,1 +1,1" และสิ้นสุดลงก่อนที่หัวเรื่องดังกล่าวถัดไปซึ่งเริ่มต้นก้อนใหม่ Magit เน้นหัวข้อปัจจุบัน (ซึ่งอาจเป็นส่วนใหญ่) ในลักษณะเดียวกับที่ Emacs มักเน้นเรื่องภูมิภาคดังนั้นอาจทำให้เกิดความสับสน
Tarsius

1
ในสถานะ magit หรือ diff เท่านั้น buffer sคุณสามารถเวทีก้อนใหญ่ในปัจจุบันโดยไม่คำนึงถึงที่อยู่ภายในก้อนใหญ่จะเป็นเพียงโดยการกด แต่คุณยังสามารถแสดงส่วนหนึ่งของก้อนใหญ่ได้โดยทำเครื่องหมายส่วนของมัน (เช่นเดียวกับที่คุณทำในบัฟเฟอร์การเยี่ยมชมไฟล์) จากนั้นทำขั้นตอนนั้น
Tarsius

@tarsius ตรงตามที่ฉันหมายถึงภาษาอังกฤษของฉันไม่คมชัดพอ
Nsukami _

คำตอบ:


11

ไม่เลย Magit ไม่สนับสนุนสิ่งนั้น รุ่นในอนาคตอาจแม้ว่า Git-Gutter ให้การสนับสนุนทันที git-gutter:stage-hunkคำสั่งการตั้งชื่อ


ในขณะที่นี่เป็นระยะก้อนใหญ่มันไม่ได้เวทีภูมิภาค
ocodo

ฉันพบว่าเป็นการดีที่สุดที่จะสร้างการเชื่อมโยงไปยังสเตจก้อนใหญ่จากนั้นสกิลอื่นเพื่อข้ามไปยังก้อนถัดไปสเตจและทำซ้ำ นอกจากนี้ยังมีวิธีการจัดบัฟเฟอร์ทั้งหมด แต่ ณ จุดนี้คุณอาจทำเช่นนั้นจากบรรทัดคำสั่ง ฉันพบว่าเป็นการดีที่สุดที่จะทำการคอมมิทที่ระดับบล็อกด้วย git-gutter + magit การเปลี่ยนแปลงที่ใหญ่กว่านั้นไม่เหมาะกับ git-gutter
Droogans

1

ดังที่ได้กล่าวไว้ก่อนหน้านี้git-gutterเป็นส่วนขยายที่ออกแบบมาเพื่อแสดงข้อมูล git ของคุณโดยตรงในไฟล์ของคุณและทำงานจากที่นั่นในขณะที่ magit มุ่งเน้นไปที่การทำงานกับ diffs

คุณลักษณะนี้ไม่ได้รับการวางแผนสำหรับการคอมไพล์ git ตลอดเวลาเร็ว ๆ นี้ ( https://github.com/syohex/emacs-git-gutter/issues/91 )

อย่างไรก็ตามมันเป็นสิ่งที่ emacs เสียงกระเพื่อมควรจะดีมากที่จะเช็ดขึ้น (ผ่านการล่าสัตว์ในภูมิภาคและระยะเวลาพวกเขาออก) การลองทำสิ่งนี้ด้วยตัวเองเกือบจะเป็นปัญหาปัญหาเดียวก็คือ git-gutter เริ่มต้นกระบวนการพื้นหลังหลังจากที่คุณวางก้อนใหญ่และไม่รอให้มันเสร็จสิ้นดังนั้นฉันจึงต้องเพิ่มเวทมนตร์แฮ็คเล็กน้อยเพื่อจัดการกับสิ่งนี้

ฟังก์ชั่นเสียงกระเพื่อม emacs ต่อไปนี้ควรทำสิ่งที่คุณต้องการ คุณอาจต้องการผูกมันไว้กับปุ่มบางปุ่ม

(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 มีแนวโน้มที่จะมีนักล่าค่อนข้างน้อยซึ่งเป็นเหตุผลว่าทำไมฉันจึงนำคุณสมบัตินี้ไปใช้
Att Righ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.