.gitignore ไม่รวมไฟล์เฉพาะ


95

ฉันพยายามใช้.gitignoreไฟล์เพื่อแยกที่templates.jsอยู่ในpublic/app/โฟลเดอร์ .gitignoreไฟล์ของฉันมีลักษณะดังนี้:

/vendor
/node_modules
composer.phar
composer.lock
.DS_Store
templates.js

แต่เมื่อฉันตรวจสอบใน Git Gui templates.jsไฟล์ยังคงแสดงอยู่ ฉันจะยกเว้นไฟล์โดยเฉพาะได้.gitignoreอย่างไร?


2
นั่นหมายความว่ามีการเพิ่มไฟล์ลงในที่เก็บก่อนหน้านี้แล้วหรือไม่? .gitignoreละเว้นเนื้อหาที่จะเพิ่มเท่านั้น
Willem Van Onsem

2
@CommuSoft ใช่มันถูกเพิ่มลงในที่เก็บมาก่อนแล้ว ตอนนี้ฉันจะยกเว้นได้อย่างไร วิธีการทำของฉัน.gitignoreถูกต้องหรือไม่?
user1995781

คำตอบ:


153

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

ก่อนอื่นคุณควรแก้ไขให้ดีขึ้นเพื่อ.gitignoreไม่ให้ไฟล์ถูกเพิ่มอีกต่อไป เพิ่มบรรทัดต่อไปนี้ใน.gitignoreไฟล์:

public/app/template.js

ถัดไปคุณต้องแยกไฟล์ออกจากที่เก็บ คุณอาจไม่ต้องการลบไฟล์ออกจากระบบไฟล์ของคุณซึ่งสามารถทำได้ด้วย:

git rm --cached public/app/template.js

--cachedธงมั่นใจว่าไฟล์จะไม่ถูกลบออกจากระบบไฟล์ของคุณ (ถ้าไม่ได้ที่สำคัญคุณสามารถใช้git rm public/app/template.js, แต่นี้จะลบไฟล์ )

พื้นหลัง

เหตุผลที่.gitignoreไม่ได้ใช้ในเชิงรุกเนื่องจากบางครั้งคุณอาจต้องการลบล้างไฟล์.gitignore. ตัวอย่างเช่นคุณไม่ต้องการติดตาม*.logไฟล์คุณสามารถระบุ*.logในไฟล์.gitignore. แต่หากมีรายการเฉพาะที่คุณต้องการติดตามคุณสามารถเพิ่มgit add -f some.logได้ -fกองกำลังธงgitเพื่อเพิ่มไฟล์


ผู้ช่วยชีวิตมีข้อมูลประจำตัวของฉันเปิดเป็นสาธารณะ
mLstudent33

22

เมื่อไฟล์ถูก 'เพิ่ม' ลงในที่เก็บ git หนึ่งครั้งไฟล์จะถูกติดตามต่อไปไม่ว่าไฟล์นั้นจะอยู่ในไฟล์. gitignore หรือไม่ก็ตาม

ฉันเดาว่าคุณได้เพิ่มไฟล์ template.js ไว้ก่อนหน้านี้ซึ่งในกรณีนี้จะมีการติดตามการเปลี่ยนแปลงต่อไปจนกว่าคุณจะลบออกจากที่เก็บ เมื่อไฟล์ถูกลบออกจากที่เก็บแล้วไฟล์จะถูกละเว้นอย่างเหมาะสมผ่านไฟล์. gitignore

วิธีลบไฟล์ออกจากที่เก็บ git (บรรทัดคำสั่ง) โดยไม่ต้องลบไฟล์คือ

git rm --cached FILENAME

จากนั้นเมื่อคุณทำเช่นนั้นและพยายามผูกมัดกับไฟล์ใน gitignore ของคุณมันจะไม่ทำ

โปรดทราบว่าหากคุณเพิ่มไฟล์ที่คุณมีใน gitignore โดยเฉพาะการเพิ่มไฟล์ด้วยตนเองของคุณจะแทนที่ gitignore


ขอบคุณที่รัก "git rm --cached FILENAME" ทำงานได้อย่างมีเสน่ห์ :)
Kamlesh

11

หากคุณกำลังติดตามไฟล์อยู่แล้ว ( git addอยู่บนนั้นและgit commit) .gitignoreจะไม่ช่วย

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

git rm --cached <file>


ไม่ได้ dv แต่ฉันคิดว่าคุณควรเลือกคำพูดของคุณให้ดีกว่านี้ เก็บไว้ในที่เก็บนั้นตรงกันข้ามกับเก็บไว้ในระบบไฟล์ในเครื่องของคุณ ที่เก็บไม่ได้แมปบนระบบไฟล์ ...
Willem Van Onsem

@CommuSoft แก้ไขเพื่อความพึงพอใจฉันไม่ได้ระวังมากเกินไปเพราะคนอื่นตอบได้ดีกว่า ขอบคุณสำหรับคำแนะนำ
รอส

7

ในกรณีนี้คุณสามารถหยุดการติดตามtemplates.jsด้วย

git rm --cached public/app/templates.js

ตามที่คนอื่น ๆ ได้อธิบายไว้ให้.gitignoreละเว้นเนื้อหาที่จะเพิ่มเท่านั้น ตัวอย่างเช่นหากคุณใช้บ่อยgit add .และมีtemplates.jsอยู่ในของคุณ.gitignoreคอมไพล์จะไม่เพิ่มเข้าไป

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