쉬운 역사 탐색을 위해 magit과 undo-tree를 결합


16

나는 사랑한다 undo-tree(아래 스크린 샷). 그것은 다음과 같은 간단한 키를 별도의 창 (아래 창)에서 파일의 히스토리 트리 주변의 사용자 이동 시켜서 파일 (상단 창)의 다른 버전을 탐색하기위한 쉬운 방법을 제공 n, pC-bC-f같은의 후손을 통해 스위치에 부모의.

특히 undo-tree트리 뷰에서 선택한 항목을 기반으로 파일을 보유한 버퍼를 해당 버전으로 자동 업데이트합니다.

물론, magitgit에게는 경이롭고, 비슷한 능력이 있다면, 사용자가 파일의 git history를 대화식으로 탐색 하면서 파일을 자동으로 유지하는 버퍼를 동시에 업데이트 할 수있게하는 것은 놀라운 일 입니다.

이것이 magit오늘날에도 가능 합니까?

여기에 이미지 설명을 입력하십시오


그것이 magit에 가능한지 모르지만
clemera

확실하지 undo-tree않지만 Git 히스토리는 방향이 지정된 비순환 그래프 인 반면 트리 (이름 :-p)를 사용 한다고 생각 합니다 . 사소하지 않을 수 있습니다.
suvayu

2
Magit은 이와 같은 기능을 지원하지만 현재 기능 설정 방법을 변경하고 있습니다. 완료되면 답변을 게시 할 것입니다.
tarsius

답변:


7

Magit은 최근 이와 같은 것을 지원했지만 기능은 여전히 ​​가장자리에서 약간 거칠고 명시 적으로 활성화해야합니다.


비슷한 기능이 오랫동안 존재했습니다. 로그 버퍼에서 한 커밋에서 다른 커밋으로 이동하고 동일한 프레임의 다른 창이 리포지토리의 개정 버퍼 인 경우 해당 커밋이 커밋되지 않고 커밋을 표시하기 위해 해당 버퍼가 새로 고쳐집니다 이전에 보여주고있었습니다.

최근까지 한 커밋에서 다른 커밋으로 처음 이동할 때 개정 버퍼가 만들어졌습니다. 나는 그 행동을 바꾸었고 이제는 개정 버퍼가 이제까지 만 업데이트되었습니다 . 동일한 프레임에 창이 해당 버퍼를 표시하지 않으면 로그를 이동해도 더 이상 일부 새 창이 표시되거나 기존에 다른 버퍼가 표시된 기존 창이 표시되지 않습니다.

이제 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)

그런 다음, 로그 (또는 상태) 버퍼 내에서을 눌러 RET리비전 버퍼를 표시하거나 업데이트하고 해당 버퍼로 전환합니다. 관심있는 파일로 이동 한 후 RET다시 누르십시오 . 이제 "blob-visiting"버퍼에 있습니다.이 버퍼는 작업 트리의 파일을 방문하지 않고 커밋중인 파일을 방문한다는 점을 제외하고 파일 방문 버퍼와 유사합니다.

로그 (또는 상태) 버퍼로 다시 전환하고 다른 커밋으로 이동하십시오. Blob 버퍼가 업데이트되고 있습니다.


다른 Blob을 표시해도 실제로 기존 Blob 버퍼를 재사용하지는 않습니다. 대신 새 Blob을 방문한 새 버퍼를 만든 다음 이전에 다른 Blob 버퍼를 표시 한 창에 해당 버퍼를 표시합니다. 다른 버퍼는 삭제되지 않습니다. 불행히도 꽤 많은 버퍼가 단기간에 누적 될 수 있습니다. 앞서 언급 한 거친 가장자리 중 하나가 될 것입니다. qBlob 버퍼를 누르면 삭제되므로 여러 Blob 버퍼를 표시하는 데 사용 된 창으로 이동하여 q모든 버퍼가 삭제 될 때까지 계속 눌러 정리할 수 있습니다 .

또한 pand를 사용하여 Blob 버퍼 내에서 다음 또는 이전 Blob으로 이동할 수 n있습니다. 대부분의 경우 최근 Blob으로 시작한 다음을 사용하여 이전 Blob으로 이동한다고 가정합니다 p. 그렇게하고 다른 방향으로 이동 q하려면 현재 버퍼를 종료하여 이전 버퍼, 즉 다음 얼룩으로 이동하는 것이 좋습니다 .

또한 BLOB을 방문하기 위해 개정판을 먼저 방문 할 필요는 없습니다. M-x magit-find-file RET <revision> RET <file> RET직접 사용할 수도 있지만 덜 편리합니다.


tarsius 감사합니다. 나는 magit 20151014.231(내가 알 수있는 한 최신)로 일하고 있습니다. 위에서 설명한 단계를 수행했습니다. 나는에 갔다 magit-log-buffer-file나를 위로와 아래로 커밋을 탐색 할 수있는 np하지만 누를 때 SPC또는 RET그 중 하나에 내가 얻을 :Symbol's value as variable is void: magit-blame-mode
아멜리오 바스케스 - 레이나

당신은 아마 추가 magit-blame-maybe-update-revision-buffermagit-section-movement-hook실수로.
tarsius
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.