Я люблю undo-tree
(скриншот ниже). Это обеспечивает простой способ для навигации по различным версиям файла (верхнее окно), позволяя пользователю двигаться вокруг дерева истории файла в отдельном окне (нижнее окно) с простыми клавишами , такими как n
, p
и C-b
и C-f
переключателю через потомков одного и того же родитель.
В частности undo-tree
, автоматически обновляется буфер, содержащий файл, с соответствующей версией, основанной на выборе в древовидном представлении.
Конечно, magit
это феноменально для git, и было бы удивительно, если бы у него была похожая возможность, то есть позволяла пользователям интерактивно перемещаться по истории git файла, одновременно обновляя буфер, содержащий файл автоматически.
Это вообще возможно с magit
сегодняшним днем?
источник
undo-tree
использует дерево (оно в названии :-p), тогда как история Git представляет собой ориентированный ациклический граф . Это может быть нетривиально.Ответы:
Недавно Magit получил поддержку для чего-то подобного, но эта функция все еще немного грубовата и должна быть включена явно.
Подобная функция существует в течение длительного времени - когда вы переходите от одного коммита к другому в буфере журнала, а другое окно в том же фрейме является буфером ревизии хранилища, тогда этот буфер обновляется, чтобы показать этот коммит вместо того, чтобы фиксировать его ранее показывал.
До недавнего времени буфер ревизий создавался при первом переходе от одного коммита к другому. Я изменил это поведение, и теперь буфер ревизий обновляется только когда-либо . Если ни одно окно в том же кадре уже не отображает этот буфер, перемещение по журналу больше не приведет к отображению буфера в каком-либо новом окне или существующем окне, в котором ранее отображался какой-либо другой буфер.
Так что теперь вы должны нажать SPCодин раз, чтобы отобразить буфер ревизий. Только тогда он начнет обновляться, когда вы перемещаетесь по буферу журналов.
Если вы не хотите обновлять буфер ревизий, сделайте следующее:
Если, с другой стороны, вы также хотите обновить буфер ревизий при перемещении в буфере состояния, используйте это:
Теперь возможно, чтобы буфер больших двоичных объектов автоматически обновлялся аналогичным образом. Сначала добавьте это:
И, возможно, также:
Затем в буфере журнала (или состояния) нажмите, RETчтобы отобразить или обновить буфер ревизий, а также переключиться на этот буфер. Перейдите к нужному файлу и RETснова нажмите . Теперь вы находитесь в буфере «посещения блобов», который похож на буфер посещения файлов, за исключением того, что он не посещает файл в рабочем дереве, а файл, как это было в некотором коммите.
Вернитесь в буфер журнала (или состояния) и перейдите к другому коммиту. Буфер BLOB-объектов обновляется.
Обратите внимание, что отображение другого большого двоичного объекта фактически не использует существующий буфер большого двоичного объекта. Вместо этого он создает новый буфер, который посещает этот BLOB-объект, а затем отображает этот буфер в окне, в котором ранее отображался другой буфер BLOB-объектов. Этот другой буфер не удаляется, что, к сожалению, означает, что за короткий промежуток времени может накопиться довольно много буферов. Который был бы одним из тех грубых краев, я упоминал ранее. Нажатие qв буфере BLOB-объектов действительно удаляет его, поэтому вы можете очистить его, перейдя в окно, которое использовалось для отображения различных буферов BLOB-объектов, и продолжайте нажимать, qпока все буферы не будут удалены.
Кроме того, можно перейти к следующему или предыдущему большому объекту из буфера большого объекта, используя pи n. Я полагаю , что в большинстве случаев вы начинаете с недавним сгустком , а затем перейти назад к старым сгусткам с помощью p. Если вы делаете это и затем хотите двигаться в другом направлении, я рекомендую вам использовать, qчтобы уничтожить текущий буфер и, таким образом, перейти к предыдущему буферу, то есть к следующему большому объекту.
Также обратите внимание, что вам не нужно сначала посещать ревизию, чтобы иметь возможность посетить BLOB-объект. Вы также можете использовать
M-x magit-find-file RET <revision> RET <file> RET
напрямую, но я считаю, что это менее удобно.источник
20151014.231
(последний, насколько я могу судить). Я попытался выполнить шаги, которые вы описали выше. Я пошел ,magit-log-buffer-file
что позволяет мне проводить совершающий вверх и внизn
и ,p
но когда я нажимаюSPC
илиRET
на одной из них я получаю:Symbol's value as variable is void: magit-blame-mode
magit-blame-maybe-update-revision-buffer
кmagit-section-movement-hook
по ошибке.