จะละเว้นไฟล์ที่อยู่ในที่เก็บได้อย่างไร?


96

ฉันมีไฟล์ (config.php) ที่คอมมิชชันกับที่เก็บ Git แล้ว แต่ฉันต้องการละเว้นภายในเครื่องกล่าวคือฉันต้องการให้ไฟล์นั้นยังคงอยู่ในที่เก็บ แต่บังคับให้ Git ละเว้นการเปลี่ยนแปลงใด ๆ

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


โปรดเพิ่มไฟล์. gitignore ของคุณ - ด้วยวิธีนี้เราอาจพบปัญหาเกี่ยวกับไฟล์นี้
Lars

คำตอบ:


192

หากไฟล์ยังคงแสดงอยู่ในสถานะแม้ว่าจะอยู่ใน. gitignore ก็ตามให้ตรวจสอบว่ายังไม่ได้ติดตาม

git rm --cached config.php

หากคุณต้องการละเว้นภายในเครื่องคุณสามารถทำให้สถานะคอมไพล์ถูกเพิกเฉยได้:

git update-index --assume-unchanged config.php

1
โอเคขอบคุณ ! ถ้าฉันรวมสาขาของฉันกับสาขาอื่นไฟล์นี้จะทำให้เกิดปัญหาได้หรือไม่
prcaen

1
@ Nimbus147: ไม่ควรเป็นปัญหาและการเปลี่ยนแปลงใด ๆ ในไฟล์นั้นจะยังคงถูกเพิกเฉย (เช่นไม่เพิ่ม / ยืนยัน)
VonC

หากใช้ SmartGit คุณควรใช้ลบเพื่อทำสิ่งนี้
Omid-RH

1
มีวิธีบังคับupdate-index --assume-unchangedที่สาขาระยะไกลหรือไม่? ฉันต้องการเก็บไฟล์ไว้ใน repo แต่ผู้อื่นไม่สามารถเปลี่ยนแปลงได้ แต่ไม่สามารถใช้งานได้บนเวที
p014k

1
@ p014k ไม่ใช่ว่าฉันรู้ สำหรับไฟล์ประเภทนั้นฉันเก็บเวอร์ชันไว้ภายใต้ชื่ออื่นจากนั้นใช้ไดรเวอร์ไฟล์เนื้อหาเพื่อสร้างไฟล์ที่ถูกต้อง (ส่วนตัว) โดยอัตโนมัติเมื่อจำเป็น ตัวอย่างเช่นตัวกรองนั้นจะไม่ทำงานบนพื้นที่งาน ดูstackoverflow.com/a/54454356/6309และลิงก์ที่เกี่ยวข้อง
VonC

6

ไม่สนใจไฟล์ที่เช็คอิน:

git update-index --assume-unchanged file

เพื่อย้อนกลับ

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

เปลี่ยนกลับทั้งหมด

git update-index --really-refresh 

เป็นประโยชน์. การเปลี่ยนกลับไฟล์เดียวใช้งานได้ แต่การเปลี่ยนกลับทั้งหมดไม่ได้
Adem Tepe

4

หากไฟล์อยู่ในที่เก็บแล้วและด้วยเหตุนี้พื้นที่ Index / Staging การอัปเดตเป็น. gitignore จะไม่เปลี่ยนแปลงสถานการณ์นั้น - มันจะยังคงดำเนินต่อไป

ในการลบไฟล์จากดัชนี / git rm <file>การแสดงละครการใช้พื้นที่


จะเกิดอะไรขึ้นถ้าไฟล์อยู่ในที่เก็บ แต่ยังไม่ได้จัดเตรียม ฉันพยายามที่จะเพิกเฉยต่อไฟล์ * .log แต่ฉันยังคงเห็นไฟล์เหล่านี้ใน อยากละเว้นต้องทำอย่างไร?
Sandra K

@SandraK หากมีเวอร์ชันเก่ากว่าของไฟล์นั้น (filepath / name) อยู่แล้วใน repo ที่คอมมิตสุดท้ายจะถือว่าถูกติดตาม - 'ดัชนี' จะมีไฟล์นั้นในบันทึกและstatusจะแจ้งให้คุณทราบต่อไป เกี่ยวกับการเปลี่ยนแปลงเหล่านั้น หากคุณต้องการละเว้นไฟล์ * .log สำหรับทั้งไฟล์ที่ถูกตรึงไว้ก่อนหน้านี้และที่ไม่ได้ติดตามในปัจจุบันคุณต้องทั้งสองgit rm *.logและอัปเดตไฟล์. gitignore ของคุณ ตรวจสอบก่อนว่าไฟล์บันทึกบางไฟล์มีความสำคัญจริง ๆ หรือไม่ ... ง่ายต่อการลืมไฟล์พิเศษนั้น ;-)
Philip Oakley

-3

เมื่อไฟล์อยู่ในรายการ. gitignore แล้วคุณจะไม่สามารถเปลี่ยนแปลงได้

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

สิ่งที่ฉันมักจะทำคือแบ่งไฟล์ออกเป็นสองไฟล์ซึ่งได้รับอนุญาตและฉันสามารถเปลี่ยนแปลงได้ซึ่งรวมถึงไฟล์ที่สองหากมีอยู่จากนั้น devs สามารถทำการเปลี่ยนแปลง config ในไฟล์ที่ถูกละเว้นได้


1
" เมื่อไฟล์อยู่ในรายการ. gitignore แล้วคุณจะไม่สามารถเปลี่ยนแปลงได้ " - คุณสามารถอธิบายได้ไหมว่าคุณหมายถึงอะไร? ฉันมีไฟล์จำนวนมากในหลาย ๆไฟล์ของฉัน.gitignoreและฉันก็เปลี่ยนไฟล์เหล่านี้อยู่ตลอดเวลา! นี่เป็นครั้งแรกที่ฉันได้ยินใครบางคนพูดว่าเมื่อฉันเพิ่มไฟล์.gitignoreแล้วฉันไม่สามารถเปลี่ยนแปลงได้
trejder

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