การใช้. gignignore กับไฟล์ที่คอมมิท


436

ฉันยอมรับไฟล์ที่ฉันไม่ต้องการทำตอนนี้ ฉันจะบอกให้ git เพิกเฉยต่อไฟล์เหล่านี้ในอนาคตได้อย่างไร

แก้ไข: ฉันต้องการลบออกจากพื้นที่เก็บข้อมูลด้วย พวกเขาเป็นไฟล์ที่สร้างขึ้นหลังจากที่เคยสร้างหรือให้การสนับสนุนเครื่องมือเฉพาะผู้ใช้


1
เป็นไปได้ที่ซ้ำกันของไฟล์. gignignore ที่ไม่ต้องสนใจ
Wooble

8
@ Wooble คำตอบอาจคล้ายกัน แต่คำถามนี้อธิบายถึงปัญหาที่ฉันต้องเผชิญและจำเป็นต้องแก้ไขอย่างแน่นอน
rjmunro

1
นี่คือคำตอบที่ตอบคำถามชื่อเรื่องโดยตรงโดยมีการเปลี่ยนแปลงน้อยที่สุดกับ repo git ของคุณ: stackoverflow.com/a/26245961/3543437
kayleeFrye_onDeck

คำตอบ:


471

12
มีไฟล์จำนวนมาก ฉันไม่ต้องการทำสิ่งนี้กับทุกคน
user880954

1
เป็นไฟล์ในไดเรกทอรีทั่วไปหรือไม่? หากไม่เป็นเช่นนั้นปัญหาจะลดลงสำหรับคำถามการใช้งานเชลล์ไม่ใช่คำถามคอมไพล์
Matt Ball

12
ไม่จำเป็นต้องมี 'ฉันลืมที่จะเพิ่ม. gitignore ของฉันจนกระทั่งหลังจากโหมดกระทำของฉันเริ่มต้น'
Luke Puplett

9
คำตอบอยู่ด้านล่างนี้
ลำเอียง

3
มันขอให้ฉันเพิ่มแฟล็ก -r เพื่อให้สามารถทำได้
Vishal Gulati

599

หลังจากแก้ไข.gitignoreเพื่อให้ตรงกับไฟล์ที่ถูกละเว้นคุณสามารถทำได้git ls-files -ci --exclude-standardเพื่อดูไฟล์ที่รวมอยู่ในรายการที่แยก จากนั้นคุณสามารถทำได้

//On Linux:
git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached
//On Windows:
for /F "tokens=*" %a in ('git ls-files -ci --exclude-standard') do @git rm --cached "%a"
//On mac
alias apply-gitignore="git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached"

เพื่อลบออกจากพื้นที่เก็บข้อมูล (โดยไม่ลบออกจากดิสก์)

แก้ไข : คุณสามารถเพิ่มสิ่งนี้เป็นนามแฝงในไฟล์. gitconfig ของคุณเพื่อให้คุณสามารถเรียกใช้ได้ทุกเวลาที่คุณต้องการ เพียงเพิ่มบรรทัดต่อไปนี้ในส่วน [นามแฝง] (แก้ไขตามต้องการสำหรับ Windows หรือ Mac):

apply-gitignore = !git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached

(การ-rตั้งค่าสถานะในการxargsป้องกันไม่ให้git rmทำงานกับผลลัพธ์ที่ว่างเปล่าและพิมพ์ข้อความการใช้งาน แต่อาจได้รับการสนับสนุนโดย GNU findutils รุ่นอื่น ๆxargsอาจหรือไม่อาจมีตัวเลือกที่คล้ายกัน)

ตอนนี้คุณสามารถพิมพ์git apply-gitignorerepo ของคุณและมันจะทำงานให้คุณ!


10
ฉันคิดว่า xargs สำหรับ mac ไม่มี -r ... หรือของฉันคือบั๊กกี้ / เก่าฉันไม่รู้ ... และทำไม!git ก่อน? อืม ... เหมืองของข้าทำงานalias apply-gitignore="git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached"ได้ TKS!
เฟลิเป้ซาบิโน

18
บน Windowsfor /F "tokens=*" %a in ('git ls-files -ci --exclude-standard') do @git rm --cached "%a"
Luke Puplett

นี่เพิ่งลบไฟล์. gitignore ของฉันไม่ใช่ไฟล์ที่ฉันต้องการเพิกเฉยที่ระบุไว้ในไฟล์. gitignore - นั่นคือจุดหรือไม่
Hippyjim

@Hippyjim หากไฟล์มีการยืนยันแล้ว (แม้ว่าไฟล์เหล่านั้นจะถูกระบุไว้ใน. gitignore) และ. gitignore ยังไม่ได้ทำการยืนยันจากนั้นก็จะเป็นผลลัพธ์ที่คาดหวังมิฉะนั้นฉันไม่แน่ใจว่าเกิดอะไรขึ้นในกรณีของคุณ
Jonathan Callen

1
สำหรับผู้ใช้ mac -rเป็นค่าเริ่มต้นและไม่ได้รับการยอมรับจากรุ่น BSD -rดังนั้นลบ
Weishi Zeng

136

เพื่อออกจากไฟล์ใน repo แต่ไม่สนใจการเปลี่ยนแปลงในอนาคต:

git update-index --assume-unchanged <file>

และเพื่อเลิกทำสิ่งนี้:

git update-index --no-assume-unchanged <file>

เพื่อค้นหาไฟล์ที่ตั้งค่าไว้ด้วยวิธีนี้:

git ls-files -v|grep '^h'

เครดิตสำหรับคำตอบเดิมไปที่ http://blog.pagebakers.nl/2009/01/29/git-ignoring-changes-in-tracked-files/


1
Chronial มีคำตอบที่ดีในการทำสิ่งนี้ซ้ำสำหรับไดเรกทอรี: stackoverflow.com/a/16346756/1101076
jordan314

ฉันต้องการคอมมิท IDE แต่ไม่ติดตามการเปลี่ยนแปลงที่ไม่จำเป็น ใช้งานได้แม้ว่าฉันจะไม่แน่ใจว่ามันจะใช้งานได้สำหรับคนอื่น ๆ ที่ตรวจสอบพื้นที่เก็บข้อมูล มันสามารถรวมกับgit ls-files -ci --exclude-standard -z | xargs -0 git update-index --assume-unchangedถ้าช่วย
dlamblin

7
นี่เป็นคำตอบเดียวที่ทำในสิ่งที่ถามชื่อคำถามได้อย่างแม่นยำ ที่สมบูรณ์แบบ! คำตอบอื่น ๆ เหล่านี้ส่วนใหญ่มีปัญหากับไฟล์โดยไม่จำเป็น
kayleeFrye_onDeck

1
นี่คือคำตอบที่ถูกต้องสำหรับคำถาม การใช้คำสั่งเช่นgit rm --cachedจะลบไฟล์ในที่เก็บซึ่งไม่ตรงกับความต้องการของ Quizzer ขอบคุณ. ฉันซาบซึ้งจริงๆ คำตอบของคุณช่วยฉันได้มาก
ramwin

88

ตรวจสอบให้แน่ใจว่า repo ที่แท้จริงของคุณเป็นรุ่นล่าสุด

  1. แก้ไข.gitignoreตามที่คุณต้องการ
  2. git rm -r --cached .
  3. git add .

จากนั้นกระทำตามปกติ


14
นี่ควรเป็นคำตอบที่ได้รับการยอมรับเนื่องจากคำถามดังกล่าวระบุว่ามีไฟล์จำนวนมากที่ต้องลบออก
nbeuchat

3
โปรดทราบว่าขั้นตอนที่ 2 อาจใช้เวลาสักครู่ถ้าคุณมีที่เก็บขนาดใหญ่
brainbag

สิ่งนี้นำไปสู่การลบไฟล์ทั้งหมดออกจากดัชนี! สิ่งนี้ช่วยฉัน: git reset HEAD(อย่าลืมซ่อนการเปลี่ยนแปลง)
aksh1618

2
ขั้นตอนที่ 2 ลบทุกอย่างใช่ แต่ขั้นตอนที่ 3 ควรอ่านทุกอย่างยกเว้นตัวที่ล้มเหลวเนื่องจาก. gitignore
ojchase

11

คำถามเก่า แต่พวกเราบางคนอยู่ในgit-posh(powershell) นี่คือทางออกสำหรับสิ่งนั้น:

git ls-files -ci --exclude-standard | foreach { git rm --cached $_ }

0

ทำตามขั้นตอนเหล่านี้:

  1. เพิ่มพา ธ ไปยังgitignoreไฟล์

  2. เรียกใช้คำสั่งนี้

    git rm -r --cached foldername
    
  3. กระทำการเปลี่ยนแปลงตามปกติ

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