git vim geçici dosyalarını yoksay


238

Git'in tüm dizinlerde (sistem genelinde global olarak veya tek bir proje için yerel olarak) vim tarafından üretilen geçici dosyaları yoksaymasını sağlamanın doğru yolu nedir?


6
Desen *.sw?standart .swpdeğil aynı zamanda alternatif takas dosya uzantılarını çözer .swo.
buley

7
@buley, öneriniz .swfdosyaları da göz ardı edecektir . Özellikle bir Flash uygulaması oluşturuyorsanız, bunu yapmaktan kesinlikle vazgeçireceğim.
stephenmurdoch

1
@marflar İyi bir nokta. .Ancak gizli dosya ile önekle aynı desen önleyecektir.
buley

Bugün de bir .swx gördüm.
Richard

2
16 yedek dosyaları oluşturduktan sonra (yani Deney gösterileri .tmp.swp, .tmp.swo, ..., .tmp.swa), vim yaratır .tmp.svz. Sonra ne olacağını görmek için sabırsızım .tmp.saa- belki .tmp.rzz? GÜNCELLEME: Kaynak ( src/memline.c, işlev findswapname()) içine bakıldığında .saabir hatayla vazgeçer: "E326: Çok fazla takas dosyası bulundu".
Keith Thompson

Yanıtlar:


391

Vim geçici dosyaları ~ ile biter, böylece dosyaya .gitignoresatır ekleyebilirsiniz

*~

Vim ayrıca swp ve swo uzantılarına sahip takas dosyaları oluşturur. bu satırları kaldırmak için:

*.swp
*.swo

Bu, tek bir projedeki tüm vim geçici dosyalarını yok sayar.

Küresel olarak yapmak istiyorsanız, evinizde bir .gitignore dosyası oluşturabilir (başka bir ad veya konum verebilirsiniz) ve aşağıdaki komutu kullanın:

git config --global core.excludesfile ~/.gitignore

Ardından, yoksaymak istediğiniz dosyaları bu dosyaya eklemeniz yeterlidir


30
Kullandığım yüzden Vim, art arda adlı takas dosyaları (.swp, .swo vs.) yaratacaktır .*.sw*benim de .gitignorehepsini gizlemek için.
Drew Stephens

32
@DrewStephens, .*.sw?daha doğru olduğuna inanıyorum . (Rağmen insanlar *.sw*gerçekten belirgin bir şey eksik olan şüpheli bazı varyant kullanmak gördüm ...)
Morten Siebuhr

10
@ Morten vimdoc.sourceforge.net/htmldoc/recover.html ,. *. S ?? hepsini Unix'te (.swp'den .saa'ya indirimler) yakalardı.
Max Nanasy

6
Sadece @MatrixFrog mükemmel yorumum biraz genişletmek için - bu soru vim için olduğundan bu projede doğru .gitignore bulabilirsiniz burada .
SnapShot

17
Dikkatli ol. github's dosyaları .*.s[a-w][a-z]yok sayar .svg.
Jon

118

Alternatif olarak vim'i takas dosyalarını ayrı bir konuma kaydedecek şekilde yapılandırabilirsiniz, örneğin .vimrcdosyanıza aşağıdakine benzer satırlar ekleyerek :

set backupdir=$TEMP//
set directory=$TEMP//

Daha fazla bilgi için bu vim ipucuna bakın .


8
not, Mac OS X'te $TMPDIRgerçek tempdir'i almak için kullanabilirsiniz :)
Alex Moore-Niemi

5
Tercih ettiğiniz dizinden (~ / tmp // kullanıyorum) sonra gelen çift eğik çizgi, tam yolu depolayarak dosya adlandırma çakışmalarını önler. Bu şekilde, örneğin config.xml adlı dosyaları aynı anda iki dizinde düzenleyebilirsiniz.
Brian

1
Ne anlama $TEMPgeliyor?
themefield

set undodir=$TEMP//Ayrıca kalıcı geri alma dosyalarını kaydettiğim için de eklemem gerekti.
Micah Lindstrom

24

Bu, depo başına değil, yalnızca kullanıcı bazında yapılması gereken bir şeydir. Joe emacs kullanıyorsa, emacs yedekleme dosyalarını yok saymak isteyecektir, ancak Betty (vi kullanan) vi yedekleme dosyalarını yok sayılmasını isteyecektir (birçok durumda benzerdir, ancak var olan yaklaşık 24.893 ortak editör vardır ve güzel çeşitli yedekleme uzantılarının tümünü yok saymaya çalışmak çok saçma.)

Başka bir deyişle, herhangi bir şey koymayın .gitignoreveya core.excludesiçinde $GIT_DIR/config. $HOME/.gitconfigBunun yerine bilgileri girin (nunopolonia'nın da belirttiği gibi --global.) "Global" in sistem başına değil kullanıcı başına anlamına geldiğini unutmayın.

Tüm kullanıcılar için sistemde yapılandırma yapmak istiyorsanız (ki siz istemezsiniz), farklı bir mekanizmaya ihtiyacınız olacaktır. (Deponun başlatılmasından önce şablon kurulumuyla mümkündür.)


3
Görünüşe göre, Betty Joe :-) çok daha akıllı :-) Ben martinl (Git yerine Vim sabitleme) cevap kullanarak sona erdi rağmen, iyi tavsiye ve bir oy hak.
paxdiablo

11

Ayrıca aşağıdaki dosyaları göz ardı etmeyi düşünmenizi tavsiye ederim:

.*.swp
.*.swo

ile biten dosyalarınız olabilir. .swp


5

"Git commit" dan önce vim'den çıkın.

marka için vim(yedekleme dosyaları için başka klasörler kullanmak /tmpörneğin):

set bdir-=.
set bdir+=/tmp

vim dosyasının .swp dosyaları için geçerli klasörü kullanarak durdurulması:

set dir-=.
set dir+=/tmp

Kullanım -=, +=genellikle iyi olurdu, çünkü vim bdir, dir için başka varsayılanlara sahiptir , hepsini temizlemek istemiyoruz. Bdir, dir hakkında daha fazla bilgi için vim yardımına bakın :

:h bdir
:h dir

5
Vim takas dosyalarınızı nerede sakladığınıza dikkat edin. Düzenlemekte olduğunuz bir dosyadan yanlışlıkla kimlik bilgilerini veya diğer verileri sızdırabilirsiniz: security.stackexchange.com/questions/65883/…
Mnebuerquo

5

İşte takas dosyası uzantıları oluşturur gerçek VİM kodudur:

/* 
 * Change the ".swp" extension to find another file that can be used. 
 * First decrement the last char: ".swo", ".swn", etc. 
 * If that still isn't enough decrement the last but one char: ".svz" 
 * Can happen when editing many "No Name" buffers. 
 */
if (fname[n - 1] == 'a')        /* ".s?a" */
{   
    if (fname[n - 2] == 'a')    /* ".saa": tried enough, give up */
    {   
        EMSG(_("E326: Too many swap files found"));
        vim_free(fname);
        fname = NULL;
        break;  
    }
    --fname[n - 2];             /* ".svz", ".suz", etc. */
    fname[n - 1] = 'z' + 1;
}
--fname[n - 1];                 /* ".swo", ".swn", etc. */

Bu, şu biçimdeki takas dosyalarını oluşturur:

[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-v][a-z]
[._]sw[a-p]

Github'un VIM için kendi gitignore dosyasına dahil olan şey budur .

Diğerlerinin de belirttiği gibi, bu .gitignore ayrıca .svg resim dosyalarını ve .swf adobe flash dosyalarını yok sayar .


3

Bu git vim tarafından oluşturulan geçici dosyaları yoksay bulacaksınız bulundu:

[._]*.s[a-w][a-z]
[._]s[a-w][a-z]
*.un~
Session.vim
.netrwhist
*~

Aynı zamanda görülebilir burada .


5
Ayrıca, .swfbir flash uygulaması yaptığınızda ortaya çıkan sinir bozucu dosyaları görmezden gelir .
stephenmurdoch

Flash dosyalarınızı kontrol etmeniz gereken bir geliştirici olmadığınız sürece iyi çalışır :-)
paxdiablo

1
Bu, .svghangisinin sorun olabileceğini göz ardı edecektir .
Bruno Bronosky

1
Sahip olduğunuzdan *.un~beri dahil etmek gereksizdir*~
Bruno Bronosky

2

Elbette,

Projenizin ana dizininde bir ".gitignore" oluşturmanız ve

*.swp

bu kadar

bir komutta

project-home-directory$ echo '*.swp' >> .gitignore

4
echo *.swp >> .gitignoreÖnceki .gitignore'un geçersiz kılmasından kaçınmanın daha iyi olduğunu düşünüyorum .
Cesar A. Rivas

2
Kabuğun '*' genişlemesini istemezsiniz. Yani, kullanmakecho '*.swp' >> .gitignore
Eddified

Ayrıca yanlışlıkla bu >karakterlerden birini kaçırmak istemezsiniz . Bir keresinde bunu passwddosyaya yaptım sonra oturumu
kapattım

2
# VIM: Temperory files
*~

# VIM: Swap-files
[._]*.s[a-w][a-z]
[._]s[a-w][a-z]

# VIM: Commands :cs, :ctags
tags
cscope.*

# VIM session
Session.vim

# VIM: netrw.vim: Network oriented reading, writing, browsing (eg: ftp scp) 
.netrwhist

Takas dosyasının adı normal olarak ".swp" uzantılı düzenlediğiniz dosyayla aynıdır.

  • Unix'te bir '.' , düzenlenmiş dosyayla aynı dizindeki dosya adlarını değiştirmeye eklenir. Bu, takas dosyasının bir dizin listesinde görünmesini önler.
  • MS-DOS makinelerinde ve 'shortname' seçeneği açıkken herhangi bir '.' orijinal dosya adında '_' ile değiştirilir.
  • Bu dosya zaten varsa (örn. Bir kilitlenmeden kurtardığınızda) bir uyarı verilir ve ".swo", ".swn" vb. Başka bir uzantı kullanılır.
  • Mevcut bir dosyanın üzerine asla yazılmaz.
  • Takas dosyası, Vim dosyayı düzenlemeyi durdurur durdurmaz silinir.

'.' İfadesinin değiştirilmesi '_' ile MS-DOS uyumlu dosya sistemleri (örn. crossdos, multidos) ile ilgili sorunları önlemek için yapılır.

http://vimdoc.sourceforge.net/htmldoc/recover.html

http://www.vim.org/scripts/script.php?script_id=1075


0

Myy durumunda, geçici dosyalar önceki eylemler tarafından zaten işlenmiştir, bu nedenle .gitignore'u değiştirmek bu taahhüt edilen dosyaları etkilemez ..., önce yapmanız git rm files_to_be_ignored --cache, ardından taahhütte bulunmanız , sonra YAPILMASI gerekir .


0

Bu, Alex Moore-Niemi tarafından belirtildiği gibi bir Mac üzerinde çalışıyor:

set backupdir=$TMPDIR//
set directory=$TMPDIR//

Emin kullanmak olun TMPDIRve TEMPDIR.


-4

Kaynak kontrolü kullanıyorsanız. vim temp dosyaları oldukça işe yaramaz.
Bu yüzden onları oluşturmak için vim yapılandırmak isteyebilirsiniz.

Sadece ~ / .vimrc dosyanızı düzenleyin ve şu satırları ekleyin:

set nobackup
set noswapfile

6
Kaynak kontrolü, yedeklemelerle veya Vim'in takas dosyalarıyla aynı ayrıntı düzeyinde çalışmaz. Her kaydetme işleminden sonra (veya belirli sayıda karakter veya saniyeden sonra - Vim'in takas dosyalarının size verdiklerinin basitleştirilmesi) işliyor olsanız bile, kaynak kontrolü olmayan dosyaları (hangi yedekler için) düzenlemek isteyebilirsiniz. ve takas dosyaları hala arzu edilir).
Chris Johnsen

8
VIM geçici dosyaları, düzenleyici kilitlenmeleri ve diğer birkaç nedenden dolayı son derece yararlıdır. Onları kapatmak bebeği banyo suyuyla atıyor.
Brian Riehman

5
@Arnis Say, elektrik kesintisi mi? Ya da X seansınızın herhangi bir nedenle ölmesini sağlamak. vim temp dosyaları oldukça önemli IMO'dur.
jrdioko

1
@jrdioko X çökmesi, bir kişinin neden kullanmak isteyebileceğinin screen(veya dtachtüm ekran özelliklerini istemediğinin) nedenidir . Elektrik kesintileri UPS tarafından gerçekleştirilir. Yedeklemeler {tüm önemli dosyaları yedeklemek için favori yazılımınız} tarafından yapılır. Zaten düzenlenmiş dosyaları düzenlemeye çalıştığımda bildirim almak için takas dosyaları kullanıyorum, yedeklemeli N + 1'ci yere sahip olmak kalıcı geri alma kullanışlı olduğu için dosyalara zarar vermiyor ve geri almıyor. Sadece geri alma dosyaları benim için biraz önemli.
ZyX

5
Vim'e geçici dosyaları başka bir yerde depolamasını söylemeniz daha iyi olur.
Kyle
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.