Başka bir git şubesinden bir dosyayı nasıl açarım?


35

Geçerli git deposundaki başka bir şubeden dosya açmak istiyorum. Bu SO sorusunu gördüm , ancak bunu Vim ile birleştirmeye yönelik öneriler hantal. Sözdizimi vurgulamayı, dosya türü ayarlarını vb. Koruyan daha basit bir yol var mı?

Eğer yardımcı olursa:

  • Ben kaçak eklentiyi yüklemiş (gerçi nadiren kullanılır).
  • Değiştirmeme gerek yok.

Dosya şu anda açık arabellek veya farklı bir dosya olabilir.

Yanıtlar:


49

Sen kullanabilirsiniz :Gedit/ :Gsplit/ :Gvsplitform ile / ...{revision}:{filename}

:Gedit branch:/foo/bar.c

Not: Dosya geçerli dosyayla aynı ise, şöyle komutu kısaltabilirsiniz: :Gsplit branch:%.

Genellikle mevcut dosyanın bir farkının dosyayı farklı bir dalda açmaktan daha çok tercih edildiği bir durumdur. Bunu yoluyla yapabilirsiniz :Gdiff {branch}.

Daha fazla yardım için bkz:

:h fugitive-:Gedit
:h fugitive-revision
:h fugitive-:Gdiff
:h c_%

Ayrıca , Kaçak Serisindeki Vimcasts bölümlerini de kontrol etmek isteyebilirsiniz .


Güzel! Meraklı: açılmış bir dosyayı değiştirirsem ne olur?
muru

1
@muru Tamponun salt okunur bir tamponda açıldığını fark edeceksiniz (muhtemelen [RO]durum satırında bir fark var ).
Peter Rincker

evet, orada.
muru

fugitivehavuzun kökünden yola ihtiyacı var. Cevap zaten bunu kapsıyor, ancak yanlış bir şekilde kaçakçılığın, deponun belirli bir alt dizininde olduğumuzu anlayabileceğini varsaydım.
Paschalis

şaşırtıcı .. kaçak kullanan ilk kez .. uzun süredir
kurduğum halde

14

Bu OP'nin istediğinden biraz daha geniş, ancak eklentileri ve muhtemelen başka revizyon kontrol sistemlerini kullanmak istemeyen insanlar için bu küçük pasaj oldukça iyi çalışıyor:

:new
:r! git show branch:file
:1d

Yeni bir pencere oluşturur ve verilen komutun çıktısını yeni arabelleğe okuyarak dosyayı orada gösterir. Bu elbette sadece git ile değil, herhangi bir harici komutla çalışır.

Bzr örneği (burada REV sözdizimi dal belirtebilir):

:new
:r! bzr cat -r REV file
:1d

Hg örneği (hg'deki dallar hakkında emin değilim; yeterince kullanmayın)

:new
:r! hg cat -r REV file
:1d

Svn (için örnek)

:new
:r! svn cat file@REV
:1d

Muhtemelen SO dosyalarında olduğu gibi sözdizimi vurgulamak için dosya türünü ayarlamak isteyebilirsiniz, ancak en azından boruları karıştırmak zorunda değilsiniz.

Açıldıktan sonra Vim'in henüz bir dosya adı olmayacağından, :w filenameveya ile yeni bir adla kaydedebilirsiniz :saveas filename. Düzenlemek istemiyorsanız, a :setlocal readonlyve / veya içine de atabilirsiniz :setlocal nomodifiable.

-Edit: Otomatik Dosya Tipi-

Biraz daha iş, ama Vim'den filetype'ı tahmin etmesini isteyebilirsin.

:filetype detect

Ancak, Vim'in henüz bir adı olmadığından, bu her zaman iyi çalışmaz (örneğin, bazı C kodlarını okudum ve tahmin ediyorum) filtype=conf.

Kaydederek bir ad verebiliriz, ancak mevcut bir dosyanın üzerine yazmak istemiyoruz. Ayrıca dosya adını da ayarlayabiliriz (Thanks @PeterRincker!), Ancak yine, çarpışma riskini almak istemiyoruz. Hem dal adı hem de dosya adı olan bir dosyanın mevcut olması muhtemel olmadığı için, bunları bazı rasgele ayırıcılarla birleştiririz

:exe "silent file " . "branch" . "-" . "file"
:filetype detect

Nerede "file"gerçek dosya ile ve değiştirilir "branch"şube adı ile

Tabii ki, bu noktada neredeyse bir eklenti yazıyoruz ;-)

Hepsini birlikte düşünürsek, işte vimrc'nize ekleyebileceğiniz git git özel bir işlev:

function! GitFile(branch,file)
    new
    exe "silent r! git show " . a:branch . ":" . a:file
    1d
    exe "silent file " . a:branch . "-" . a:file
    filetype detect
    setlocal readonly     "don't allow saving
    setlocal nomodified   "allow easy quitting without saving
    setlocal nomodifiable "don't allow modification
endfunction

bir komutu sarabilir ya da doğrudan arayabilirsiniz call GitFile("whateverBranch","myfile.c"). Adında bir tampon ile yeni bir pencere alırsınızwhateverBranch-myfile.c


Ve bu yöntemi kullanarak dosya tipini, sözdizimini vb. Otomatik olarak algılayabilir miyim?
muru

Ne yazık ki daha fazla iş olmadan;
Yazıyı

1
Eklenti yöntemini @ PeterRinker'ın gönderdiği yerden kullanmanızı öneririm. İstediğiniz hoş şeylerin çoğunu yapmalı. Çoğunlukla veriyi almak için editörden ayrılmak veya boru tesisatıyla uğraşmak zorunda kalmayacağımı göstermek istedim ve eklentileri kullanmaktan nefret eden bazı insanlar olduğunu biliyorum.
John O'M.

1
Sadece filetoyu tespit edebilmek için biraz ekledim. Artık sadece anında yazmak istediğiniz bir şey değildir, ancak .vimrc'ye kolay bir ek olarak çalışabilir. Belirli bir eklenti kullanmak muhtemelen daha iyi çalışacaktır.
John O'M.

:fileGeçici bir dosya kullanmak yerine dosyanızı adlandırmak için kullanmak isteyebilirsiniz . Bkz.:h :file
Peter Rincker,
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.