簡単な履歴ナビゲーションのためにmagitと元に戻すツリーを組み合わせる


16

私は大好きですundo-tree(下のスクリーンショット)。それは、次のような簡単なキーを持つ別のウィンドウ(下のウィンドウ)で、ファイルの履歴ツリーの周りのユーザーの動きをさせることで、ファイル(上のウィンドウ)の異なるバージョンをナビゲートするために簡単な方法を提供しnpかつC-bC-f同じの子孫渡ってスイッチに親。

最も注目すべきundo-treeは、ツリービューでの選択に基づいて、対応するバージョンでファイルを保持しているバッファを自動的に更新することです。

もちろん、magitgit には驚異的であり、同様の機能、つまり、ユーザーがファイルのgit履歴をインタラクティブにナビゲートしながら、同時にファイルを保持しているバッファーを自動的に更新できるようになると驚くでしょう。

これはmagit今日でも可能ですか?

ここに画像の説明を入力してください


magitで可能かどうかはわかりませんが、github.com / pidu / git
timemachineを

確かではありませんがundo-tree、ツリーを使用していると思います(名前は:-pです)が、Gitの履歴は有向非循環グラフです。自明ではないかもしれません。
スバユ

2
Magitはこのようなものをサポートしていますが、現在この機能を有効にする方法を変更しています。完了したら、回答を投稿します。
-tarsius

回答:


7

Magitは最近、このようなもののサポートを獲得しましたが、この機能はまだエッジが少し粗いため、明示的に有効にする必要があります。


同様の機能が長い間存在していました-ログバッファー内のあるコミットから別のコミットに移動し、同じフレーム内の別のウィンドウがリポジトリのリビジョンバッファーである場合、そのバッファーは更新され、コミットする代わりにそのコミットを表示します以前に表示されていました。

ごく最近まで、あるコミットから別のコミットに最初に移動したときにリビジョンバッファが作成されていました。私はその振る舞いを変更しましたが、今ではリビジョンバッファが更新されるだけです。同じフレーム内のウィンドウにそのバッファが表示されていない場合、ログ内を移動しても、新しいウィンドウまたは以前に他のバッファを表示していた既存のウィンドウにバッファが表示されなくなります。

そのSPCため、リビジョンバッファを表示するには1回押す必要があります。その場合にのみ、ログバッファ内を移動したときに更新が開始されます。

リビジョンバッファを更新したくない場合は、次のようにします。

(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バッファーを表示していたウィンドウにそのバッファーを表示します。他のバッファは削除されていません。これは、残念ながら、かなりの数のバッファが短時間で蓄積される可能性があることを意味します。これは、これらの荒いエッジの1つです。qblobバッファーを押すと削除されます。そのため、さまざまなblobバッファーを表示するために使用されたウィンドウに移動して、qすべてのバッファーが削除されるまで押し続けます。

さらに、pおよびを使用して、ブロブバッファー内から次または前のブロブに移動できnます。ほとんどの場合、最近のblobから始めて、を使用して古いblobに戻ると仮定しますp。それを行ってから別の方向に移動する場合はq、現在のバッファを強制終了して、前のバッファ、つまり次の blobに移動することをお勧めします。

また、ブロブにアクセスできるようにするために、最初にリビジョンにアクセスする必要はありません。M-x magit-find-file RET <revision> RET <file> RET直接使用することもできますが、あまり便利ではありません。


タルシウスありがとうございます。私はmagit 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-buffermagit-section-movement-hookた可能性があります。
タルシウス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.