git ไม่สนใจไฟล์ชั่วคราวเป็นกลุ่ม


238

อะไรคือวิธีที่ถูกต้องในการทำให้ git ไม่สนใจไฟล์ชั่วคราวที่สร้างขึ้นโดย vim ในทุกไดเรกทอรี (ทั้งระบบทั่วทั้งระบบหรือภายในเครื่องสำหรับโครงการเดียว)


6
รูปแบบการ*.sw?แก้มาตรฐานแต่ยังนามสกุลไฟล์แลกเปลี่ยนทางเลือกเช่น.swp .swo
buley

7
@buley ข้อเสนอแนะของคุณจะไม่สนใจ.swfไฟล์ ฉันขอแนะนำอย่างยิ่งให้คุณทำเช่นนั้นโดยเฉพาะอย่างยิ่งหากคุณกำลังสร้างแอพ Flash
stephenmurdoch

1
@marflar จุดดี รูปแบบเดียวกันนำหน้าด้วยไฟล์ที่ซ่อน.ควรป้องกันอย่างไรก็ตาม
buley

ฉันเห็น. swx ในวันนี้เช่นกัน
Richard

2
แสดงให้เห็นว่าการทดลองว่าหลังจากที่สร้าง 16 แฟ้มสำรอง ( .tmp.swp, .tmp.swo, ... .tmp.swa) .tmp.svzเป็นกลุ่มสร้าง ฉันไม่มีความอดทนที่จะดูว่าเกิดอะไรขึ้น.tmp.saa- บางที.tmp.rzz? UPDATE:มองหาแหล่งที่มา ( src/memline.c, ฟังก์ชั่นfindswapname()) มันยอมแพ้หลังจาก.saaเกิดข้อผิดพลาด: "E326: พบไฟล์สลับมากเกินไป"
Keith Thompson

คำตอบ:


391

ไฟล์ชั่วคราวเป็นกลุ่มลงท้ายด้วย ~ เพื่อให้คุณสามารถเพิ่มไฟล์ลง.gitignoreในบรรทัด

*~

Vim ยังสร้างไฟล์สลับที่มีนามสกุล swp และ swo เพื่อลบผู้ที่ใช้บรรทัด:

*.swp
*.swo

สิ่งนี้จะไม่สนใจไฟล์ชั่วคราวทั้งหมดในโครงการเดียว

หากคุณต้องการทำร่วมกันคุณสามารถสร้างไฟล์. gitignore ในบ้านของคุณ (คุณสามารถตั้งชื่อหรือตำแหน่งอื่น ๆ ) และใช้คำสั่งต่อไปนี้:

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

จากนั้นคุณเพียงแค่เพิ่มไฟล์ที่คุณต้องการเพิกเฉยต่อไฟล์นั้น


30
เป็นกลุ่มจะสร้างไฟล์ชื่อต่อเนื่องแลกเปลี่ยน (.swp, .swo ฯลฯ ) ดังนั้นฉันจะใช้.*.sw*ในของฉัน.gitignoreที่จะซ่อนพวกเขาทั้งหมด
Drew Stephens

32
@DrewStephens ฉันเชื่อว่า.*.sw?มีความแม่นยำมากขึ้น (แม้ว่าฉันเคยเห็นคนใช้ตัวแปรบางอย่างใน*.sw*การสงสัยว่าฉันเป็นคนที่ขาดอะไรบางอย่างที่ชัดเจนจริงๆ ... )
Morten Siebuhr

10
@Morten ตามvimdoc.sourceforge.net/htmldoc/recover.html,. *. s ?? จะจับพวกเขาทั้งหมดใน Unix (การ. s ลดลงจาก. swp เพื่อ. saa)
Max Nanasy

6
เพียงเพื่อขยาย @MatrixFrog ความคิดเห็นที่ดีเยี่ยมบิต - ตั้งแต่คำถามนี้สำหรับกลุ่มคุณสามารถหา .gitignore ที่ถูกต้องในโครงการที่นี่
SnapShot

17
ระวัง. github .*.s[a-w][a-z]จะละเว้น.svgไฟล์
Jon

118

หรือคุณสามารถกำหนดค่า vim เพื่อบันทึก swapfiles ไปยังตำแหน่งอื่นเช่นโดยการเพิ่มบรรทัดที่คล้ายกับ.vimrcไฟล์ของคุณ:

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

ดูเคล็ดลับที่เป็นกลุ่มนี้สำหรับข้อมูลเพิ่มเติม


8
โปรดทราบใน Mac OS X คุณสามารถใช้$TMPDIRเพื่อรับ tempdir ที่แท้จริง :)
Alex Moore-Niemi

5
เครื่องหมายทับสองหน้าหลังไดเรกทอรีที่คุณต้องการ (ฉันใช้ ~ / tmp //) ป้องกันการชนกันของชื่อไฟล์โดยการจัดเก็บเส้นทางแบบเต็ม ด้วยวิธีนี้คุณยังสามารถแก้ไขไฟล์ที่ชื่อตัวอย่างเช่น config.xml ในสองไดเรกทอรีในเวลาเดียวกัน
Brian

1
อะไร$TEMPหมายถึง?
คะแนน

หมายเหตุฉันต้องเพิ่มset undodir=$TEMP//ด้วยเนื่องจากฉันบันทึกไฟล์เลิกทำแบบถาวร
คาลินด์สตรอม

24

นี่คือสิ่งที่ควรทำในแบบต่อผู้ใช้เท่านั้นไม่ใช่ต่อพื้นที่เก็บข้อมูล หาก Joe ใช้ emacs เขาจะต้องการให้ emacs ไฟล์สำรองถูกละเว้น แต่ Betty (ที่ใช้ vi) จะต้องการให้ละเว้นไฟล์สำรอง vi (ในหลาย ๆ กรณีพวกเขาจะคล้ายกัน แต่มีบรรณาธิการอยู่ประมาณ 24,893 คนและมันค่อนข้างสวย ไร้สาระที่จะพยายามละเว้นส่วนขยายการสำรองข้อมูลต่าง ๆ ทั้งหมด)

ในคำอื่น ๆ ไม่ได้ใส่อะไรใน.gitignoreหรือในcore.excludes $GIT_DIR/configใส่ข้อมูลลงไป$HOME/.gitconfigแทน (ตามที่โนนูโพโลเนียแนะนำด้วย--global) โปรดทราบว่า "ทั่วโลก" หมายถึงต่อผู้ใช้ไม่ใช่ต่อระบบ

หากคุณต้องการการกำหนดค่าทั่วทั้งระบบสำหรับผู้ใช้ทั้งหมด (ซึ่งคุณไม่ต้องการ) คุณจะต้องใช้กลไกที่แตกต่างกัน (อาจมีการตั้งค่าแม่แบบก่อนที่จะเริ่มต้นของพื้นที่เก็บข้อมูล)


3
เห็นได้ชัดว่า Betty ฉลาดกว่า Joe :-) คำแนะนำที่ดีและสมควรได้รับการโหวตแม้ว่าฉันจะลงเอยด้วยการใช้คำตอบจาก martinl (แก้ไขใน Vim แทนที่จะเป็น Git)
paxdiablo

11

ฉันอยากจะแนะนำให้คิดว่าจะไม่สนใจไฟล์เช่น:

.*.swp
.*.swo

เนื่องจากคุณอาจมีไฟล์ที่ลงท้ายด้วย .swp


5

ออกเป็นกลุ่มก่อน "git กระทำ"

เพื่อvimใช้โฟลเดอร์อื่นสำหรับไฟล์สำรอง ( /tmpตัวอย่าง):

set bdir-=.
set bdir+=/tmp

เพื่อให้ vim หยุดใช้โฟลเดอร์ปัจจุบันสำหรับไฟล์. swp:

set dir-=.
set dir+=/tmp

-=, +=โดยทั่วไปแล้วการใช้จะดีเพราะกลุ่มมีค่าเริ่มต้นอื่น ๆ สำหรับbdir, dirเราไม่ต้องการล้างทั้งหมด ตรวจสอบความช่วยเหลือเป็นกลุ่มสำหรับข้อมูลเพิ่มเติมเกี่ยวกับbdir, dir :

:h bdir
:h dir

5
ระวังตำแหน่งที่คุณเก็บไฟล์ vim swap ของคุณ คุณสามารถรั่วไหลของข้อมูลประจำตัวหรือข้อมูลอื่น ๆ จากไฟล์ที่คุณกำลังแก้ไข: security.stackexchange.com/questions/65883/…
Mnebuerquo

5

นี่คือรหัส VIM จริงที่สร้างนามสกุลไฟล์ swap:

/* 
 * 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. */

สิ่งนี้จะสร้างไฟล์สลับในรูปแบบ:

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

ซึ่งเป็นที่สวยมากสิ่งที่มีอยู่ในไฟล์ gitignore GitHub ของตัวเองสำหรับเสียงเรียกเข้า

เป็นคนอื่นได้ตั้งข้อสังเกตอย่างถูกต้อง .gitignore นี้จะไม่สนใจ.svgไฟล์ภาพและ.swf Adobe ไฟล์แฟลช


3

ฉันพบสิ่งนี้จะมี git ละเว้นไฟล์ชั่วคราวที่สร้างโดย vim:

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

นอกจากนี้ยังสามารถดูได้ที่นี่


5
มันจะไม่สนใจ.swfไฟล์ที่น่ารำคาญเหล่านั้นที่จะโผล่ขึ้นมาทุกครั้งที่คุณสร้างแอพแฟลช
stephenmurdoch

ซึ่งทำงานได้ดีตราบเท่าที่คุณไม่จำเป็นต้องเป็นนักพัฒนาที่จะตรวจสอบในไฟล์ Flash ของคุณ :-)
paxdiablo

1
สิ่งนี้จะไม่สนใจ.svgซึ่งอาจเป็นปัญหา
Bruno Bronosky

1
เป็นเรื่องซ้ำซ้อนที่*.un~คุณจะต้องรวมเอาไว้*~
Bruno Bronosky

2

ตรวจสอบว่า

เพียงแค่ต้องสร้าง ".gitignore" ในโฮมไดเร็กตอรี่ของโปรเจคและต้องมี

*.swp

แค่นั้นแหละ

ในหนึ่งคำสั่ง

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

4
ฉันคิดว่าecho *.swp >> .gitignoreดีกว่าเพื่อหลีกเลี่ยงการแทนที่. gitignore ก่อนหน้า
Cesar A. Rivas

2
คุณไม่ต้องการให้เชลล์ขยาย '*' ดังนั้นใช้echo '*.swp' >> .gitignore
Eddified

คุณไม่ต้องการพลาดหนึ่งใน>ตัวละครเหล่านั้นโดยไม่ตั้งใจ ฉันเคยทำแบบนั้นกับpasswdไฟล์แล้วออกจากระบบ :-)
paxdiablo

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

ปกติชื่อของไฟล์ swap จะเหมือนกับชื่อไฟล์ที่คุณกำลังแก้ไขโดยมีนามสกุล ".swp"

  • บน Unix หมายถึง '.' ถูกผนวกรวมเพื่อสลับชื่อไฟล์ในไดเรกทอรีเดียวกันกับไฟล์ที่แก้ไข นี่เป็นการหลีกเลี่ยงที่ไฟล์สลับจะปรากฏในรายการไดเรกทอรี
  • บนเครื่อง MS-DOS และเมื่อตัวเลือก 'ชื่อย่อ' เปิดอยู่จะมี 'ใด ๆ ' ในชื่อไฟล์ต้นฉบับจะถูกแทนที่ด้วย '_'
  • หากไฟล์นี้มีอยู่แล้ว (เช่นเมื่อคุณกู้คืนจากความผิดพลาด) จะมีคำเตือนและมีการใช้ส่วนขยายอื่น ".swo", ".swn" ฯลฯ
  • ไฟล์ที่มีอยู่จะไม่ถูกเขียนทับ
  • ไฟล์ swap จะถูกลบทันทีที่ Vim หยุดแก้ไขไฟล์

การแทนที่ '.' ด้วย '_' จะทำเพื่อหลีกเลี่ยงปัญหากับระบบไฟล์ที่เข้ากันได้กับ MS-DOS (เช่น crossdos, multidos)

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

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


0

ในกรณีของฉันไฟล์ชั่วคราวได้รับการยอมรับจากการกระทำก่อนหน้านี้ดังนั้นการแก้ไข. gitignore จะไม่ส่งผลกระทบต่อไฟล์ที่ได้รับการยอมรับ ... คุณจะต้องทำgit rm files_to_be_ignored --cacheก่อนจากนั้นจึงทำการคอมมิท


0

สิ่งนี้ใช้ได้กับ Mac ตามที่ Alex Moore-Niemi ระบุไว้:

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

ตรวจสอบให้แน่ใจว่าจะใช้ไม่ได้TMPDIRTEMPDIR


-4

หากคุณใช้การควบคุมแหล่งที่มา ไฟล์ vim temp ค่อนข้างไร้ประโยชน์
ดังนั้นคุณอาจต้องการกำหนดค่าเป็นกลุ่มไม่ให้สร้าง

เพียงแก้ไข Your ~ / .vimrc และเพิ่มบรรทัดเหล่านี้:

set nobackup
set noswapfile

6
การควบคุมแหล่งที่มาไม่ได้ทำงานที่ความละเอียดเท่ากันกับการสำรองข้อมูลหรือ swapfiles ของ Vim แม้ว่าคุณจะทำหลังจากบันทึกทุกครั้ง (หรือหลังจากจำนวนอักขระหรือวินาทีจำนวนหนึ่ง - การทำให้ swapfiles ของ Vim ให้คุณมีความเรียบง่าย) ก็ยังเป็นไปได้สูงที่คุณอาจต้องการแก้ไขไฟล์ที่ไม่ได้ควบคุมแหล่งที่มา (สำหรับการสำรองข้อมูล และ swapfiles ยังคงเป็นที่ต้องการ)
Chris Johnsen

8
ไฟล์ชั่วคราวของ VIM นั้นมีประโยชน์อย่างยิ่งสำหรับตัวแก้ไขข้อขัดข้องและด้วยเหตุผลหลายประการ การปิดเครื่องคือการเหวี่ยงลูกน้อยด้วยน้ำอาบ
Brian Riehman

5
@Annis พูดไฟฟ้าดับ? หรือให้เซสชั่น X ของคุณตายด้วยเหตุผลบางอย่าง ไฟล์ชั่วคราวเป็นสิ่งสำคัญมาก IMO
jrdioko

1
@jrdioko X crash เป็นสาเหตุว่าทำไมอาจต้องการใช้screen(หรือdtachถ้าเขาไม่ต้องการคุณสมบัติหน้าจอทั้งหมด) UPS ได้รับกระแสไฟฟ้าขัดข้อง ทำการสำรองข้อมูลโดย {ซอฟต์แวร์โปรดของคุณสำหรับการสำรองไฟล์สำคัญทั้งหมด} ฉันใช้ไฟล์สลับเพื่อรับการแจ้งเตือนเมื่อฉันพยายามแก้ไขไฟล์ที่มีการแก้ไขแล้วไฟล์สำรองเนื่องจากการมีตำแหน่ง N + 1 ที่มีการสำรองข้อมูลไม่เป็นอันตรายและยกเลิกไฟล์เนื่องจากการเลิกทำแบบถาวรนั้นมีประโยชน์ การยกเลิกไฟล์เท่านั้นที่มีความสำคัญต่อฉัน
ZyX

5
คุณควรบอกให้ vim เก็บไฟล์ temp ไว้ที่อื่นแทนที่จะปิดการใช้งาน
Kyle
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.