บังคับให้เพิ่มแม้จะมีไฟล์. gitignore


413

มีวิธีบังคับgitให้เพิ่มไฟล์แม้จะเป็น.gitignoreไฟล์หรือไม่?


4
คำถามที่ดีกว่าอาจเป็น - ทำไมคุณต้องการทำเช่นนั้น? หากคุณต้องการติดตามไฟล์ให้ยกเลิกการจัดรูปแบบ.gitignoreไฟล์(นำหน้ารูปแบบไฟล์ในไฟล์ด้วย!เช่น!dont/ignore/this/file)
Ohad Schneider

6
@OhadSchneider สิ่งนี้มีประโยชน์หากคุณบังคับให้คอมไฟล์สร้างไปยังสาขาอื่น โครงการไม่กี่ทำเช่นนี้เช่น StrongLoop สำหรับการใช้งานที่ปลอดภัย
Deminetix

5
@OhadSchneider สำหรับพวกเรามันมากขึ้นเพราะนักพัฒนาส่วนใหญ่ติดตั้ง git ด้วย Visual Studio 2015 ซึ่งเพิ่ม gitignore ทั่วโลกในโฟลเดอร์ผู้ใช้ สิ่งนี้ไม่รวมไฟล์เช่น * .dll และ * .exe เป็นสิ่งที่ยอดเยี่ยมสำหรับโครงการใหม่ของเราที่ใช้เฉพาะแพ็คเกจ nuget ที่ถูกเรียกคืนในระหว่างการสร้าง แต่สำหรับโครงการขนาดเล็กจำนวนมากเรายังคงใช้ dll ที่อ้างอิงด้วยตนเองในโซลูชัน สำหรับโครงการเหล่านั้นเราต้องการรวมไว้ด้วยตนเองแทนที่จะบอกให้นักพัฒนาทุกคนแสดงความคิดเห็นไฟล์ * .dll และ * .exe ใน gitignore ทั่วโลก
Nullius

4
@Nullius คุณไม่สามารถยกเลิกการเพิกเฉยพวกเขาในระดับที่สูงขึ้น.gitignore(พูดเพิ่ม.gitignoreในโฟลเดอร์เดียวกับ dll หรือข้างบนหรืออะไร)?
Ohad Schneider

คำตอบ:


569

ดูman git-add:

   -f, --force
       Allow adding otherwise ignored files.

ดังนั้นเรียกใช้สิ่งนี้

git add --force my/ignore/file.foo

11
เอ่อที่ใช้งานไม่ได้กับสถานะ git ไฟล์ยังไม่ปรากฏ
ทำเครื่องหมาย

5
ฉันทดสอบมันเพื่อให้แน่ใจว่าใช้งานได้จริงและใช้งานได้จริง คุณช่วยอธิบายสภาพแวดล้อมของคุณ (OS, git version ... ) ได้ไหม? นี่คือสิ่งที่ฉันทำโดยทั่วไป: echo "/foo" >> .gitignore; echo "bar" > foo; git add foo # should throw an error; git add -p foo # works(ไม่สามารถวางบรรทัดใหม่ในความคิดเห็นดำเนินการคำสั่งที่ 1 โดย 1
Daniel Böhmer

4
เกิดขึ้นกับฉันเหมือนกันก่อนหน้านี้ฉันเคยรัน git update-index --asume-notanged บนไฟล์ของฉัน ฉันต้องยกเลิกด้วย - ไม่คิด - ไม่เปลี่ยนแปลงและใช้งานได้
จาโค

4
ใช้งานได้เฉพาะกับฉันโดยใช้ไวด์การ์ดโดยใช้ git 1.9.5 บน Windows แม้หลังจากพยายาม - ไม่ - ถือว่าไม่เปลี่ยนแปลง "git add - f <filename>" ไม่ทำอะไรเลย แต่ใช้ "git add -f *" ได้ การใช้ TortoiseGit ก็ใช้งานได้เช่นกัน
mhenry1384

@ mhenry1384 เหตุผลที่ใช้งานได้กับสัญลักษณ์ตัวแทนใน Windows เท่านั้นอาจเป็นเพราะการใช้ตัวคั่นพา ธ สำหรับฉันเฉือน "/" ใช้งานได้ แต่แบ็กสแลช "\" ไม่ทำงาน ความจริงที่ cmd / PowerShell แปลง "/" เป็น "\" สำหรับเราทำให้ง่ายต่อการเรียกใช้ในสิ่งนี้
ohw

19

แม้จะมีวิธีการทำงานของ Daniel Böhmer แต่ Ohad Schneider ก็เสนอทางออกที่ดีกว่าในความคิดเห็น:

หากไฟล์นั้นถูกเพิกเฉยและคุณบังคับให้เพิ่มไฟล์นั้น - ไฟล์นั้นอาจถูกละเว้นโดยไม่ตั้งใจอีกในอนาคต (เช่นเมื่อไฟล์ถูกลบออกไปการคอมมิชชันจะถูกสร้างขึ้นและไฟล์จะถูกสร้างขึ้นใหม่

คุณควรยกเลิกการเพิกเฉยในไฟล์. gitignore เช่นนั้น: Unignore ไดเรกทอรีย่อยของไดเรกทอรีที่ถูกเพิกเฉยใน Git


4
สิ่งนี้ถูกต้อง ฉันใช้ตัวเลือก --force สำหรับไฟล์ข้อมูลขนาดเล็กจากนั้นจัดเรียงโครงสร้างของโฟลเดอร์ใหม่และปิดกั้นไฟล์ที่ถูกติดตามทั้งหมด HOWEVER: มีการ.gitignoreใช้งาน!specific-file-name.txtโดยไม่มีลำดับชั้นของโฟลเดอร์วิธีการติดตามนี้จะติดตามไฟล์รอบ ๆ repo
เมอร์ลิน

มันขึ้นอยู่กับสถานการณ์เช่นบางครั้งคุณต้องการยกเว้น "1.txt" ในโฟลเดอร์ทั้งหมดและบางครั้ง "folder1 / * txt."
AS

14
นั่นไม่ใช่ทางออกที่ "ดีกว่า" มันเป็นวิธีการแก้ปัญหาที่แตกต่าง
aij

2

อีกวิธีในการทำให้สำเร็จคือการแก้ไขไฟล์ gitignore ชั่วคราวเพิ่มไฟล์จากนั้นเปลี่ยนกลับเป็น gitignore ฉันรู้สึกแฮ็คเล็กน้อย


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