การรวม magit กับ undo-tree เพื่อให้ง่ายต่อการนำทางประวัติศาสตร์


16

ฉันรักundo-tree(ภาพหน้าจอด้านล่าง) มันมีวิธีที่ง่ายสำหรับการนำทางผ่านรุ่นที่แตกต่างของไฟล์ (หน้าต่างด้านบน) โดยให้ย้ายผู้ใช้รอบ ๆ ต้นไม้ประวัติศาสตร์ของไฟล์ในหน้าต่างแยกต่างหาก (หน้าต่างด้านล่าง) ด้วยปุ่มง่ายเช่นn, pและC-bและC-fสวิทช์ข้ามลูกหลานของเดียวกัน ผู้ปกครอง

สิ่งที่สะดุดตาที่สุดคือundo-treeอัพเดตบัฟเฟอร์ที่เก็บไฟล์ด้วยเวอร์ชันที่สอดคล้องตามการเลือกในมุมมองแบบต้นไม้โดยอัตโนมัติ

แน่นอนว่าmagitเป็นปรากฏการณ์สำหรับคอมไพล์และมันก็น่าทึ่งถ้ามันมีความสามารถที่คล้ายกันคือให้ผู้ใช้สำรวจประวัติคอมไพล์ของไฟล์แบบโต้ตอบในขณะที่อัพเดทบัฟเฟอร์ที่ถือไฟล์โดยอัตโนมัติ

วันนี้เป็นไปได้magitหรือไม่

ป้อนคำอธิบายรูปภาพที่นี่


ไม่ทราบว่าเป็นไปได้ด้วย magit แต่ลองดูที่github.com/pidu/git-timemachine
clemera

ผมไม่แน่ใจ แต่ผมคิดว่าundo-treeการใช้ต้นไม้ (มันในชื่อ :-P) ในขณะที่ประวัติศาสตร์ Git เป็นผู้กำกับวัฏจักรกราฟ มันอาจไม่ไร้สาระ
suvayu

2
Magit สนับสนุนบางอย่างเช่นนี้ แต่ตอนนี้ฉันกำลังเปลี่ยนวิธีการเปิดคุณสมบัติ ฉันจะโพสต์คำตอบเมื่อทำเสร็จแล้ว
Tarsius

คำตอบ:


7

Magit เพิ่งได้รับการสนับสนุนบางอย่างเช่นนี้ แต่คุณสมบัติยังค่อนข้างหยาบรอบ ๆ ขอบและต้องเปิดใช้งานอย่างชัดเจน


คุณลักษณะที่คล้ายกันนี้มีอยู่เป็นเวลานาน - เมื่อคุณย้ายจากที่หนึ่งไปยังอีกที่หนึ่งใน log buffer และหน้าต่างอื่นในเฟรมเดียวกันคือ repision buffer ของที่เก็บจากนั้นบัฟเฟอร์นั้นจะถูกรีเฟรชเพื่อแสดงว่ากระทำแทนที่จะกระทำอะไรก็ตาม ก่อนหน้านี้กำลังแสดง

จนกระทั่งเมื่อเร็ว ๆ นี้บัฟเฟอร์การตรวจทานถูกสร้างขึ้นเมื่อคุณย้ายจากคอมมิตไปยังอีกครั้ง ฉันได้เปลี่ยนพฤติกรรมดังกล่าวและตอนนี้บัฟเฟอร์การแก้ไขได้รับการปรับปรุงเท่านั้น หากไม่มีหน้าต่างในเฟรมเดียวกันแสดงบัฟเฟอร์นั้นแล้วการย้ายไปรอบ ๆ บันทึกจะไม่ทำให้บัฟเฟอร์แสดงในหน้าต่างใหม่หรือหน้าต่างที่มีอยู่ซึ่งก่อนหน้านี้แสดงบัฟเฟอร์อื่น ๆ อีกต่อไป

ดังนั้นตอนนี้คุณต้องกดSPCหนึ่งครั้งเพื่อแสดงบัฟเฟอร์การแก้ไข จากนั้นจะเริ่มอัปเดตเมื่อคุณย้ายไปรอบ ๆ บัฟเฟอร์การบันทึก

หากคุณไม่ต้องการให้มีการปรับปรุงบัฟเฟอร์การแก้ไขให้ทำสิ่งนี้:

(remove-hook 'magit-section-movement-hook
             'magit-log-maybe-update-revision-buffer)

หากในอีกทางหนึ่งคุณต้องการให้มีการปรับปรุงบัฟเฟอร์การแก้ไขเมื่อเคลื่อนที่ไปรอบ ๆ ในบัฟเฟอร์สถานะให้ใช้สิ่งนี้:

(add-hook 'magit-section-movement-hook
          'magit-status-maybe-update-revision-buffer)

ตอนนี้เป็นไปได้ที่บัฟเฟอร์ของ blob จะได้รับการปรับปรุงโดยอัตโนมัติในลักษณะที่คล้ายกัน ก่อนอื่นให้เพิ่มสิ่งนี้:

(add-hook 'magit-section-movement-hook
          'magit-log-maybe-update-blob-buffer)

และอาจจะยัง:

(add-hook 'magit-section-movement-hook
          'magit-status-maybe-update-blob-buffer)

จากนั้นกดบัฟเฟอร์ log (หรือสถานะ) RETเพื่อแสดงหรืออัพเดตบัฟเฟอร์การแก้ไขและเพื่อสลับไปยังบัฟเฟอร์นั้น ย้ายไปยังไฟล์ที่คุณสนใจแล้วกดRETอีกครั้ง ขณะนี้คุณอยู่ในบัฟเฟอร์ "การเยี่ยมชม blob" ซึ่งคล้ายกับบัฟเฟอร์การเยี่ยมชมไฟล์ยกเว้นว่ามันจะไม่ได้เยี่ยมชมไฟล์ในแผนผังการทำงาน แต่เป็นไฟล์เหมือนเดิม

สลับกลับไปที่บัฟเฟอร์การบันทึก (หรือสถานะ) แล้วย้ายไปที่การคอมมิชชันอื่น กำลังอัปเดตบัฟเฟอร์หยด


โปรดทราบว่าการแสดง blob อื่นไม่ได้ใช้บัฟเฟอร์ blob ที่มีอยู่แล้วจริงๆ แต่จะสร้างบัฟเฟอร์ใหม่ที่เข้าชมหยดนั้นแล้วแสดงบัฟเฟอร์นั้นในหน้าต่างซึ่งก่อนหน้านี้แสดงบัฟเฟอร์หยดอื่น ๆ บัฟเฟอร์อื่นนั้นไม่ได้ถูกลบซึ่งน่าเสียดายที่มีบัฟเฟอร์ไม่กี่ตัวที่สามารถสะสมในช่วงเวลาสั้น ๆ ซึ่งจะเป็นหนึ่งในขอบขรุขระเหล่านั้นฉันกล่าวถึงก่อนหน้านี้ การกดqในบัฟเฟอร์ blob จะเป็นการลบดังนั้นคุณสามารถล้างข้อมูลได้โดยไปที่หน้าต่างที่ใช้เพื่อแสดงบัฟเฟอร์ Blob ต่างๆและกดค้างไว้qจนกว่าบัฟเฟอร์ทั้งหมดจะถูกลบ

นอกจากนี้ก็เป็นไปได้เพื่อนำทางไปยังหยดก่อนหน้าหรือถัดจากภายในหยด buffer ใช้และp nฉันคิดว่าในกรณีส่วนใหญ่คุณเริ่มต้นด้วยการหยดที่ผ่านมาและจากนั้นย้ายไปข้างหลังเพื่อ blobs pเก่าใช้ หากคุณทำเช่นนั้นและต้องการที่จะย้ายไปในทิศทางอื่นฉันขอแนะนำให้คุณใช้qเพื่อฆ่าบัฟเฟอร์ปัจจุบันและย้ายไปยังบัฟเฟอร์ก่อนหน้านั่นคือหยดถัดไป

โปรดทราบว่าคุณไม่จำเป็นต้องไปที่การแก้ไขก่อนเพื่อให้สามารถเยี่ยมชมการหยด คุณสามารถใช้M-x magit-find-file RET <revision> RET <file> RETโดยตรง แต่ฉันพบว่าสะดวกน้อยกว่า


ขอบคุณ Tarsius ฉันกำลังทำงานกับ magit 20151014.231(ล่าสุดเท่าที่ฉันสามารถบอกได้) ฉันลองทำตามขั้นตอนที่คุณอธิบายไว้ข้างต้น ผมไป magit-log-buffer-fileซึ่งจะช่วยให้ฉันเพื่อนำทางกระทำขึ้นและลงด้วยnและpแต่เมื่อฉันกดSPCหรือRETหนึ่งของพวกเขาว่าผมจะได้รับ:Symbol's value as variable is void: magit-blame-mode
เมลิโอ Vazquez-Reina

คุณอาจจะเพิ่มmagit-blame-maybe-update-revision-bufferไปmagit-section-movement-hookโดยไม่ได้ตั้งใจ
Tarsius
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.