Geçmişte kolay gezinme için magit'i geri alma ağacıyla birleştirmek


16

I love undo-tree(aşağıdaki ekran görüntüsü). Bu gibi basit tuşlarıyla ayrı bir pencerede (alt pencere) dosyanın geçmişi ağacının etrafında kullanıcı hareket vererek bir dosyaya (üst pencere) farklı sürümleri gezinmek için kolay bir yol sağlar n, pve C-bve C-faynı torunları karşısında anahtara ebeveyn.

En önemlisi, undo-treedosyayı tutan arabelleği ağaç görünümündeki seçime göre karşılık gelen sürümle otomatik olarak günceller.

Tabii ki, magitgit için olağanüstü ve benzer bir yeteneğe sahip olması şaşırtıcı olurdu, yani kullanıcıların dosyayı tutan arabelleği aynı anda otomatik olarak güncellerken bir dosyanın git geçmişinde etkileşimli olarak gezinmesine izin vermek .

magitBugün ile bu mümkün mü?

resim açıklamasını buraya girin


Magit ile mümkün olup olmadığını bilmiyorum ama github.com/pidu/git-timemachine
clemera

Emin değilim, ama bence undo-treebir ağaç kullanıyor (ismin adı :-p), oysa Git geçmişi yönlendirilmiş bir döngüsel grafik . Önemsiz olabilir.
suvayu

2
Magit böyle bir şeyi destekliyor, ancak şu anda özelliğin nasıl açıldığını değiştiriyorum. İşim bittiğinde bir cevap göndereceğim.
tarsius

Yanıtlar:


7

Magit kısa süre önce böyle bir şey için destek aldı, ancak özellik hala kenarlarda biraz kaba ve açıkça etkinleştirilmesi gerekiyor.


Benzer bir özellik uzun bir süredir var - bir günlük arabelleğinde bir komuttan diğerine geçtiğinizde ve aynı çerçevedeki başka bir pencere deponun revizyon arabelleğidir, o zaman arabellek herhangi bir taahhüt yerine yerine bu komutu göstermek için yenilenir. daha önce gösteriyordu.

Çok yakın zamana kadar revizyon tamponu, bir taahhütten diğerine ilk taşındığınızda oluşturuldu. Bu davranışı değiştirdim ve şimdi düzeltme arabelleği yalnızca güncellendi . Aynı çerçevedeki hiçbir pencere bu arabelleği zaten görüntülemezse, günlükte hareket etmek artık arabelleğin artık yeni bir pencerede veya daha önce başka bir arabelleği görüntüleyen mevcut bir pencerede görüntülenmesine neden olmaz.

Şimdi SPCrevizyon tamponunu görüntülemek için bir kez basmanız gerekiyor. Ancak o zaman günlük arabelleğinde dolaştığınızda güncellenmeye başlayacaktır.

Düzeltme arabelleğinin güncellenmesini istemiyorsanız bunu yapın:

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

Öte yandan, durum arabelleğinde hareket ederken revizyon arabelleğinin güncellenmesini istiyorsanız, bunu kullanın:

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

Artık bir damla tamponunun benzer şekilde otomatik olarak güncellenmesi mümkündür. Önce şunu ekleyin:

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

Ve belki de:

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

Ardından, bir günlük (veya durum) arabelleğinin içinde RET, düzeltme arabelleğini görüntülemek veya güncellemek ve aynı zamanda bu arabelleğe geçmek için basın. İlgilendiğiniz dosyaya gidin ve RETtekrar düğmesine basın . Artık, çalışma ağacındaki dosyayı değil, bazı taahhütlerde olduğu gibi dosyayı ziyaret etmesi dışında, dosya ziyaret arabelleğine benzer bir "blob-visit" arabelleğindesiniz.

Günlük (veya durum) arabelleğine geri dönün ve başka bir işleme geçin. Blob arabelleği güncelleniyor.


Başka bir damla görüntülemenin gerçekte var olan damla tamponunu yeniden kullanmadığını unutmayın. Bunun yerine, bu blob'u ziyaret eden ve daha sonra diğer blob tamponunu görüntüleyen bu tamponu pencerede görüntüleyen yeni bir tampon oluşturur. Bu diğer arabellek silinmiyor, bu da maalesef birkaç tamponun kısa sürede birikebileceği anlamına geliyor. Daha önce bahsettiğim, o pürüzlü kenarlardan biri olurdu. qBir damla tamponuna basmak onu siler, böylece çeşitli damla tamponlarını görüntülemek için kullanılan pencereye gidip qtüm tamponlar silinene kadar basmaya devam edebilirsiniz.

Buna ek olarak, pve tuşlarını kullanarak bir blob tamponundan sonraki veya önceki bloba gitmek mümkündür n. Çoğu durumda yeni bir damla ile başladığınızı ve daha sonra kullanarak eski damlalara geri döndüğünüzü varsayalım p. Bunu yaparsanız ve daha sonra diğer yönde hareket etmek istiyorsanız q, geçerli arabelleği öldürmek ve böylece önceki arabelleğe yani bir sonraki bloba geçmek için kullanmanızı öneririm .

Ayrıca, bir blob'u ziyaret edebilmek için önce bir revizyonu ziyaret etmeniz gerekmediğini unutmayın. M-x magit-find-file RET <revision> RET <file> RETDoğrudan da kullanabilirsiniz , ancak bunu daha az uygun buluyorum.


Teşekkürler tarsius. Magit ile çalışıyorum 20151014.231(en son söyleyebildiğim kadarıyla). Yukarıda tarif ettiğiniz adımları izlemeyi denedim. Gittim için magit-log-buffer-filebeni yukarı ve aşağı hareketin göstermenize imkan tanıyan nve pancak bastığınızda SPCveya RETonlardan birinde alıyorum:Symbol's value as variable is void: magit-blame-mode
Amelio Vazquez-Reina

Muhtemelen ilave magit-blame-maybe-update-revision-bufferetmek magit-section-movement-hookyanlışlıkla.
tarsius
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.