ยกเลิกการติดตามไฟล์จากคอมไพล์ชั่วคราว


450

ฉันได้ตั้งค่าคอมไพล์ท้องถิ่นบนเครื่องของฉัน เมื่อฉันเริ่มต้นคอมไพล์ฉันเพิ่ม libs และไบนารีที่รวบรวมไว้ล่วงหน้า อย่างไรก็ตามในระหว่างการพัฒนาของฉันฉันไม่ต้องการเช็คอินไฟล์เหล่านั้นเป็นระยะ ๆ ฉันไม่ต้องการลบไฟล์เหล่านี้ออกจาก repo มีวิธีใดที่จะไม่ติดตามไฟล์เหล่านี้จนกว่าฉันจะเสร็จสิ้นการพัฒนา (ฉันคิดว่าฉันไม่สามารถใช้. gitignore ได้เพราะมันใช้งานได้กับไฟล์ที่ไม่ได้อยู่ใน git เท่านั้นฉันต้องการปิดการใช้งานการติดตามไฟล์ชั่วคราว)


ที่เกี่ยวข้องstackoverflow.com/q/936249/11343
CharlesB

คำตอบ:


723

git update-indexควรทำในสิ่งที่คุณต้องการ

นี่จะเป็นการบอก git ที่คุณต้องการเริ่มละเว้นการเปลี่ยนแปลงของไฟล์
git update-index --assume-unchanged path/to/file

เมื่อคุณต้องการเริ่มติดตามอีกครั้ง
git update-index --no-assume-unchanged path/to/file

เอกสาร Github: update-index


3
ในที่สุดคำสั่งที่ใช้งานได้จริงสำหรับไฟล์
Richard De Wit

15
ทำไมไม่ git rm -r --cached <file>
Ehsan

23
@Ehsan ดูเหมือนว่าgit rm --cachedจะนำไปสู่การลบสำเนาในเครื่องอื่น ๆ ที่สาขาเดียวกันมีการตรวจสอบออกในการดึงของพวกเขาต่อไป ดูarlocarreon.com/blog/git/…และโดยเฉพาะการสนทนาด้านล่าง
mit

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

8
สมมติว่าไม่เปลี่ยนแปลงไม่ได้มีไว้สำหรับวัตถุประสงค์นี้ อาจต้องการอ่านกระทู้
Appy

264

คุณสามารถเก็บไฟล์ที่ไม่ได้ติดตามได้

git rm -r --cached <file>

เพิ่มไฟล์ของคุณด้วย

git add -u

พวกเขาผลักดันหรือทำสิ่งที่คุณต้องการ


19
นั่นคือคำตอบที่ถูกต้องตามจริง: git-scm.com/book/en/v2/…
Ehsan

git rm --cached .DS_Store จากนั้นจะพิมพ์rm '../.DS_Store'และไฟล์ภายในเครื่องจะถูกลบ ??! ( git version 2.6.4 (Apple Git-63))
Weishi Zeng

มีคำตอบที่นี่stackoverflow.com/questions/6919121/…
Weishi Zeng

4
นี่ไม่ใช่คำตอบที่ถูกต้องเพราะจะเป็นการลบไฟล์ในแหล่งที่มา OP ต้องการละเว้นการเปลี่ยนแปลงในท้องถิ่นของไฟล์นั้นไม่ใช่ลบการติดตามทั้งหมด
cjsimon

2
คำเตือน: มันจะลบไฟล์ที่คุณต้องการยกเลิกการติดตามเช่นกัน วิธีแก้ไขคือการคัดลอกไฟล์ทั้งหมดที่ใดที่หนึ่งแล้วคัดลอกกลับมาหลังจากคอมมิชชัน
psad

111
git rm --cached

อย่างไรก็ตามคุณไม่ควรกระทำการรวบรวมไบนารีและการพึ่งพาจากภายนอกในตอนแรก ใช้เครื่องมือเช่น Bundler เพื่อดึงสิ่งเหล่านั้นมาใช้แทน


2
อย่าลืมตัวเลือก -r (เรียกซ้ำ) สำหรับไดเรกทอรี: git rm -r --cached
Anatoliy Shuba


7

หนังสือ git กล่าวถึงสิ่งนี้ในหัวข้อ 2.4: "Undoing Things" โดยทั่วไปสิ่งที่คุณต้องทำคือรีเซ็ตสถานะของดัชนีสำหรับไฟล์บางไฟล์กลับสู่สถานะ HEAD นั่นคือสถานะของการเช็คเอาต์ล่าสุด (หรือกระทำ) วิธีนี้จะเป็นการยกเลิกการจัดเตรียมไฟล์ไปยังดัชนีปัจจุบัน คำสั่งสำหรับภารกิจนี้คือgit reset[1]

ดังนั้นคำสั่งที่คุณต้องดำเนินการคือ:

git reset HEAD /path/to/file

รุ่นใหม่ของคอมไพล์ (ผมเชื่อว่าตั้งแต่ 1.6 หรือมากกว่านั้น) ให้คำสั่งนี้ (และอื่น ๆ อีกมากมาย) git statusเป็นเคล็ดลับเมื่อมีการดำเนิน เวอร์ชันเหล่านี้ใช้ง่ายมาก เคล็ดลับส่วนบุคคล: git add -iถ้าคุณเป็นเพียงการแสดงละครไม่กี่ไฟล์ใช้งาน สิ่งนี้จะเปิดใช้งานเครื่องมือการจัดเตรียมแบบโต้ตอบซึ่งทำให้ง่ายขึ้นเป็นพิเศษ นอกจากนี้ฉันขอแนะนำให้อ่านหนังสือเพราะมันชัดเจนมากเกี่ยวกับการใช้คอมไพล์ในสถานการณ์จริง

[1] http://www.git-scm.com/book


ฉันยอมรับว่าgit reset [file]เป็นวิธีที่ตรงไปตรงมาที่สุดในการหยุดไฟล์
Spectral

18
การเลิกทำและยกเลิกการติดตามเป็นสิ่งที่แตกต่าง
Jaime Sangcap

6

ไม่ใช่คำตอบสำหรับคำถามเดิม แต่นี่อาจช่วยใครซักคน

เพื่อดูการเปลี่ยนแปลงที่คุณทำ ( รู้ว่าไฟล์ใดถูกทำเครื่องหมายเป็น - สมมติว่าไม่เปลี่ยนแปลง )

git ls-files -v

รายการผลลัพธ์ของไฟล์จะมีคำนำหน้าด้วยอักขระหนึ่งตัว (เช่น: H หรือ h) หากเป็นตัวพิมพ์เล็ก (เช่น h) ไฟล์นั้นจะถูกทำเครื่องหมาย - สมมติว่าไม่มีการเปลี่ยนแปลง


5

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

คุณสามารถใช้คำสั่งนี้:

git rm -r -f /build\*

ตรวจสอบให้แน่ใจว่าคุณอยู่ในไดเรกทอรีหลักของไดเรกทอรีสร้าง
คำสั่งนี้จะ "ลบ" ไฟล์ซ้ำทั้งหมดที่อยู่ใน bin / หรือ build / โฟลเดอร์ โดยคำว่าลบฉันหมายความว่าคอมไพล์จะแกล้งทำเป็นว่าไฟล์เหล่านั้น "ลบ" และไฟล์เหล่านั้นจะไม่ถูกติดตาม คอมไพล์ทำเครื่องหมายไฟล์เหล่านั้นว่าอยู่ในโหมดลบ

ตรวจสอบให้แน่ใจว่าคุณมี. gitignore ของคุณพร้อมสำหรับการคอมมิทที่กำลังจะมาถึง
เอกสารประกอบ: git rm


1

git reset [ไฟล์]

รับไฟล์กลับจากพื้นที่จัดเตรียมไปยังไดเรกทอรีทำงาน

ฉันมักจะลืมเพิ่มโหนดโมดูลของฉันไปยังไฟล์. gitignore ซึ่งช่วยแก้ไขปัญหานั้นได้



1

เพื่อลบไฟล์ Untrack ทั้งหมด ลองใช้คำสั่งเทอร์มินัลนี้

 git clean -fdx

มันจะลบไฟล์ออกจากดิสก์และไม่ได้มาจากประวัติคอมไพล์
Leonardo

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