gitignore ไม่สนใจโฟลเดอร์


135

ในรากของโครงการของฉันฉันมีfooโฟลเดอร์ ข้างในfooโฟลเดอร์ฉันมีbarโฟลเดอร์ ฉันต้องการเพิกเฉยต่อการเปลี่ยนแปลงทั้งหมดของไฟล์ทั้งหมดในbarโฟลเดอร์ของฉัน ฉันมีสิ่งนี้ในgitignore:

/foo/bar

มีการตรวจสอบโฟลเดอร์: มีอยู่และมีไฟล์ที่จะถูกละเว้น gitignoreถูกเทcommitด อย่างไรก็ตามฉันมีไฟล์ที่สร้างการเปลี่ยนแปลงและอยู่ในbarโฟลเดอร์ของฉัน เมื่อฉันพิมพ์

git status

ข้างในgit bashฉันเห็นไฟล์ที่ควรถูกเพิกเฉย อาจมีสาเหตุอะไรบ้างและฉันจะเพิกเฉยต่อไฟล์ทั้งหมดในโฟลเดอร์บาร์ได้อย่างไร?

โปรดทราบว่าก่อนหน้านี้ไฟล์ถูกละเว้นด้วยบรรทัดเดียวกัน แต่ฉันต้องลบบรรทัดนั้นไปยังcommitบางสิ่งบนเซิร์ฟเวอร์ชั่วคราว หลังจากที่ผมใส่สายกลับเข้าไปในcommit gitignoreนี่เป็นเมื่อไม่นานมานี้ แต่ตอนนี้ฉันได้สังเกตุว่าไฟล์จะอยู่ในgit statusนั้น git statusผมจะคาดหวังที่จะสามารถแก้ไขไฟล์ละเว้นโดยไม่ต้องพวกเขาที่ปรากฏใน


ในอนาคตคุณไม่จำเป็นต้องแก้ไขการเพิกเฉยเพื่อเพิ่มสิ่งที่ถูกละเว้น git add -f ignored-fileจะเพิ่มไฟล์แม้ว่าจะเป็นไฟล์ที่คุณไม่สนใจก็ตาม
Chris

อะไรgit status foo/bar/file-that-should-be-ignoredให้
Chris

ไฟล์ที่ควรละเว้นหากมีการเปลี่ยนแปลงเกิดขึ้น เห็นได้ชัดว่าฉันขาดอะไรบางอย่าง แต่ตามความรู้ของฉันรายการสถานะ git ควรว่างในกรณีที่ / foo / bar ปรากฏใน. gitignore
Lajos Arpad

4
ดูเหมือนว่าไฟล์นั้นกำลังถูกติดตามโดย Git มันจะต้องถูกเพิ่มไปยังพื้นที่เก็บข้อมูลในบางจุด git log foo/bar/file-that-should-be-ignoredคุณสามารถดูประวัติการด้วย หากไม่ควรเป็นส่วนหนึ่งของที่เก็บคุณควรลบออกด้วยgit rm --cached foo/bar/file-that-should-be-ignoredแล้วทำตามคำแนะนำของ Reck ด้านล่าง (แม้ว่าฉันจะทำมันบนไฟล์ไม่ใช่โฟลเดอร์ทั้งหมด) นี่จะ (ก) ลบไฟล์ออกจาก Git, (b) เก็บไฟล์ไว้ในสำเนาในเครื่องของคุณและ (c) ทำให้ไฟล์นั้นถูกลบเมื่อผู้อื่นfetchหรือคอมมิทpullใหม่
Chris

คำตอบ:


341

ฉันเดาว่าโฟลเดอร์นี้ถูกตรวจสอบในคอมไพล์แล้วหรือยัง?

เรียกใช้git rm -r --cached <folder>และตรวจสอบอีกครั้ง


3
นี่จะเป็นการลบโฟลเดอร์ออกจาก repo (เวอร์ชั่นปัจจุบัน) OP ต้องการให้โฟลเดอร์อยู่ที่นั่น แต่ไม่ควรติดตามการเปลี่ยนแปลงใหม่
Gareth

น่าเสียดายที่ฉันต้องลบการยอมรับ วิธีการแก้ปัญหานี้ลบไฟล์รุ่นระยะไกลเมื่อผลัก ฉันต้องการตั้งค่า gitignore ให้เพิกเฉยกับไฟล์ทั้งหมดของโฟลเดอร์ไม่ใช่เพื่อลบออกจากระยะไกล เป็นไปได้ไหม ฉันเปลี่ยนกลับวิธีการแก้ปัญหา
Lajos Arpad

12
git update-index --assume-unchanged <folder>บางที?
Reck

3
@ Lajos คุณไม่ควรแก้ไขบั๊กของเขาแทนที่จะเพิ่มความคิดเห็น "แก้ไข" ที่สับสนนี้ใช่ไหม
cregox

2
@Cawas เนื่องจากเว็บไซต์นี้เกี่ยวกับการแบ่งปันความรู้คำตอบคือ: ไม่ มันเป็นเรื่องเข้าใจผิดที่จะยอมรับคำตอบที่มีข้อผิดพลาด -r นั้นไม่ใช่ทางเลือก
Lajos Arpad

46

สำหรับฉันคำตอบที่ได้รับการยอมรับเป็นส่วนหนึ่งของโซลูชันไม่ใช่โซลูชันทั้งหมด อาจเป็นขั้นตอนอื่น ๆ ที่ฉันกำลังจะโพสต์ได้ชัดเจน แต่ฉันคิดถึงพวกเขาก่อน นี่คือขั้นตอนที่ฉันทำเพื่อให้แน่ใจว่า.gitignoreไฟล์ของฉันเพิกเฉยต่อโฟลเดอร์ที่ฉันต้องการให้ละเว้น:

  1. ยอมรับการเปลี่ยนแปลงใด ๆ ที่คุณต้องการแก้ไข / เปลี่ยนแปลง
  2. เรียกใช้คำสั่งนี้: git rm -r --cached .(ซึ่งจะลบทุกอย่างออกจากดัชนี git เพื่อรีเฟรชที่เก็บ git ของคุณ)
  3. จากนั้นเรียกใช้คำสั่งนี้: git add .(เพื่อเพิ่มทุกอย่างกลับไปที่ repo)
  4. สุดท้ายยอมรับการเปลี่ยนแปลงเหล่านี้โดยใช้ git commit -m ".gitignore Fixed"

คุณสามารถค้นหาเชื่อมโยงไปยังบทความจากที่ผมพบว่าวิธีการแก้ปัญหาที่นี่


1
นี่ไม่ใช่วิธีแก้ปัญหาที่ทำงานได้ตามคำถามเดิม @ lagos-arpad ถามโดยเฉพาะเกี่ยวกับไดเรกทอรีย่อยไม่ใช่โครงการทั้งหมด โซลูชันของคุณจะลบทุกอย่างออกจากระดับรากของที่เก็บ git และนี่ไม่ใช่วิธีที่แนะนำในการจัดการกับปัญหานี้
justinhartman

แม้ว่ามันจะเป็นไดเรกทอรีย่อยเพียงอย่างเดียว แต่วิธีนี้ก็ใช้ได้กับฉันเพราะฉันจัดการกับไฟล์เดียวเท่านั้น คุณช่วยอธิบายได้อย่างละเอียดว่าทำไมถึงไม่แนะนำ
sikanderBabwani

1
สิ่งที่คุณกำลังเผชิญอยู่นั้นไม่สำคัญ นี่ไม่ใช่คำตอบสำหรับคำถามและอาจเป็นอันตรายได้เนื่องจากคำตอบอื่น ๆ ได้ชี้ให้เห็น สิ่งนี้จะลบสิ่งต่าง ๆ บน repo ระยะไกลที่คุณไม่ต้องการ
RichieHH

8

ฉันมีปัญหานี้และฉันรู้ว่าคอมไพล์ก็เพิกเฉยต่อไฟล์ / โฟลเดอร์อย่างถูกต้อง แต่โปรแกรมแก้ไขโค้ดของฉัน (Visual Studio Code) เป็นแค่บั๊กและไม่ "ทำให้พวกเขาเป็นสีเทา" อย่างถูกต้องในแถบด้านข้างของ UI ฉันรีสตาร์ท VSCode และพวกมันก็เป็นสีเทาตามที่คาดไว้


เหมือนกันที่นี่: รหัส VS v1.30.2 (ผู้ใช้)
xinthose

เหมือนกับฉัน. ขอบคุณมากสำหรับวิธีนี้! ฉันสงสัยว่าทำไม. gignignore ของฉันไม่ทำงานจนกว่าฉันจะลองรีสตาร์ท VS Code.I'm บน Visual Studio Code v1.44.2
Fritz Lim

6

เป็นส่วนเพิ่มเติมจากคำตอบที่ยอมรับ

git rm -r --cached /foo/bar/
git status

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

git reset HEAD *
git status

หลังจากนั้นก็กล่าวว่าไม่มีอะไรที่จะกระทำและเมื่อฉันแก้ไขไฟล์ภายใน/foo/bar/และทำผมยังคงได้รับgit statusnothing to commit


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