Kết hợp phép thuật với cây hoàn tác để điều hướng lịch sử dễ dàng


16

Tôi yêu undo-tree(ảnh chụp màn hình bên dưới). Nó cung cấp một cách dễ dàng để điều hướng thông qua các phiên bản khác nhau của một tập tin (cửa sổ trên cùng) bằng cách cho phép di chuyển người dùng xung quanh cây lịch sử của tập tin trong một cửa sổ riêng biệt (cửa sổ phía dưới) với các phím đơn giản như n, pC-bC-fđể chuyển đổi giữa các hậu duệ của cùng một cha mẹ.

Đáng chú ý nhất là tự động undo-treecập nhật bộ đệm giữ tệp với phiên bản tương ứng dựa trên lựa chọn trong chế độ xem dạng cây.

Tất nhiên, magitlà một hiện tượng đối với git và sẽ thật tuyệt vời nếu nó có khả năng tương tự, tức là cho phép người dùng điều hướng lịch sử git của tệp một cách tương tác trong khi cập nhật bộ đệm giữ tệp tự động.

Đây có phải là tất cả có thể với magitngày hôm nay?

nhập mô tả hình ảnh ở đây


Không biết có thể với phép thuật không nhưng hãy xem github.com/pidu/git-timemachine
clemera

Tôi không chắc chắn, nhưng tôi nghĩ rằng undo-treesử dụng một cây (trong tên :-p), trong khi lịch sử Git là một biểu đồ chu kỳ có hướng . Nó có thể không tầm thường.
suvayu

2
Magit không hỗ trợ một cái gì đó như thế này, nhưng tôi hiện đang thay đổi cách bật tính năng này. Tôi sẽ đăng câu trả lời khi tôi hoàn thành nó.
tarsius

Câu trả lời:


7

Magit gần đây đã đạt được hỗ trợ cho một cái gì đó như thế này, nhưng tính năng vẫn còn hơi thô xung quanh các cạnh và phải được kích hoạt rõ ràng.


Một tính năng tương tự đã tồn tại từ lâu - khi bạn chuyển từ cam kết này sang cam kết khác trong bộ đệm nhật ký và một cửa sổ khác trong cùng khung là bộ đệm sửa đổi của kho lưu trữ, thì bộ đệm đó được làm mới để hiển thị cam kết đó thay vì bất kỳ cam kết nào đã được hiển thị trước đó.

Cho đến gần đây, bộ đệm sửa đổi đã được tạo khi bạn lần đầu tiên chuyển từ cam kết này sang cam kết khác. Tôi đã thay đổi hành vi đó và bây giờ bộ đệm sửa đổi chỉ được cập nhật . Nếu không có cửa sổ nào trong cùng một khung đã hiển thị bộ đệm đó, thì việc di chuyển xung quanh nhật ký sẽ không còn khiến bộ đệm được hiển thị trong một số cửa sổ mới hoặc một cửa sổ hiện có trước đó hiển thị một số bộ đệm khác.

Vì vậy, bây giờ bạn phải nhấn SPCmột lần để hiển thị bộ đệm sửa đổi. Chỉ sau đó nó sẽ bắt đầu được cập nhật khi bạn di chuyển xung quanh bộ đệm nhật ký.

Nếu bạn không muốn bộ đệm sửa đổi được cập nhật, thì hãy làm điều này:

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

Mặt khác, nếu bạn cũng muốn bộ đệm sửa đổi được cập nhật khi di chuyển xung quanh trong bộ đệm trạng thái, thì hãy sử dụng:

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

Bây giờ có thể một bộ đệm blob được tự động cập nhật theo cách tương tự. Đầu tiên thêm điều này:

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

Và cũng có thể:

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

Sau đó, bên trong bộ đệm nhật ký (hoặc trạng thái) nhấn RETđể hiển thị hoặc cập nhật bộ đệm sửa đổi, và cũng chuyển sang bộ đệm đó. Di chuyển đến tập tin bạn quan tâm và nhấn RETmột lần nữa. Bây giờ bạn đang ở trong bộ đệm "truy cập blob", tương tự như bộ đệm truy cập tệp, ngoại trừ việc nó không truy cập tệp trong cây làm việc mà là tệp như trong một số cam kết.

Chuyển về bộ đệm log (hoặc trạng thái) và di chuyển đến một xác nhận khác. Bộ đệm blob đang được cập nhật.


Lưu ý rằng hiển thị một blob khác, không thực sự sử dụng lại bộ đệm blob hiện có. Thay vào đó, nó tạo ra một bộ đệm mới truy cập blob đó và sau đó hiển thị bộ đệm đó trong cửa sổ hiển thị bộ đệm blob khác trước đó. Bộ đệm khác không bị xóa, điều đó không may có nghĩa là khá nhiều bộ đệm có thể tích lũy trong một khoảng thời gian ngắn. Đó sẽ là một trong những cạnh thô, tôi đã đề cập trước đó. Nhấn qvào bộ đệm blob sẽ xóa nó, vì vậy bạn có thể dọn sạch bằng cách vào cửa sổ được sử dụng để hiển thị các bộ đệm blob khác nhau và tiếp tục nhấn qcho đến khi tất cả các bộ đệm đã bị xóa.

Ngoài ra, có thể điều hướng đến blob tiếp theo hoặc trước đó từ bên trong bộ đệm blob bằng cách sử dụng pn. Tôi giả định rằng trong hầu hết các trường hợp, bạn bắt đầu với một đốm màu gần đây và sau đó di chuyển ngược về các đốm cũ hơn bằng cách sử dụng p. Nếu bạn làm điều đó và sau đó muốn di chuyển theo hướng khác, tôi khuyên bạn nên sử dụng qđể giết bộ đệm hiện tại và do đó di chuyển đến bộ đệm trước đó, tức là blob tiếp theo .

Cũng lưu ý rằng trước tiên bạn không phải truy cập bản sửa đổi để có thể truy cập một trang. Bạn cũng có thể sử dụng M-x magit-find-file RET <revision> RET <file> RETtrực tiếp, nhưng tôi thấy rằng ít thuận tiện hơn.


Cảm ơn bạn tarsius. Tôi đang làm việc với pháp sư 20151014.231(mới nhất theo như tôi có thể nói). Tôi đã thử làm theo các bước bạn mô tả ở trên. Tôi đã đi đến magit-log-buffer-fileđó cho phép tôi điều hướng các cam kết lên xuống npnhưng khi tôi nhấn SPChoặc RETvào một trong số đó, tôi nhận được:Symbol's value as variable is void: magit-blame-mode
Amelio Vazquez-Reina

Bạn có thể thêm magit-blame-maybe-update-revision-buffervào magit-section-movement-hookdo nhầm lẫn.
tarsius
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.