ลบไฟล์ที่มีอยู่ออกจาก Git Repo


126

ฉันต้องการให้ git หยุดติดตามบันทึกการพัฒนาในเครื่องของฉัน (log / development.log) ในที่เก็บของเรา เป็นไปได้หรือไม่และฉันจะทำได้อย่างไร


คำตอบ:


143

เพียงเพื่อให้คำตอบทั้งหมดในครั้งเดียว:

  1. จาก klemens: คุณต้องเพิ่มไฟล์ลงในไฟล์ของคุณ.gitignoreเหนือไฟล์ที่ไม่ต้องการใน repo กล่าวคือ

    $ cd $ cat >> .gitignore development.log Cd

  2. จากม. narebski: จากนั้นคุณต้องลบไฟล์ออกจาก repo โดยดำเนินการ " git rm --cached <file>แล้วจึงทำการลบนี้"

หากคุณหวังว่าจะทำให้ repo ดูเหมือนว่าไม่เคยติดตามไฟล์นั้นมาก่อนนั่นเป็นเรื่องที่ซับซ้อนและท้อแท้มากขึ้นเนื่องจากไม่เพียง แต่สร้างความมุ่งมั่นใหม่สำหรับทุกการกระทำในประวัติศาสตร์ของคุณเท่านั้น แต่ยังทำลายความสามารถในการทำงานร่วมกันด้วยวิธีที่น่ารังเกียจ ระหว่างคนอื่น ๆ ที่โคลน repo ของคุณ แต่มันก็ทิ้งทุกการกระทำที่ยังไม่ผ่านการทดสอบ (สมมติว่าคุณทดสอบการกระทำของคุณก่อนที่จะทำ)

filter-branchและด้วยคำเตือนที่ในใจเครื่องมือที่คุณกำลังมองหาว่าที่เป้าหมายของคุณคือ ตัวอย่างแรกเป็นสิ่งที่ฉันอธิบาย


3
การใช้ git rm - แคชดูเหมือนว่าจะไม่เพียง แต่ลบสาขาของฉันเท่านั้น แต่เมื่อฉันดึงไปยังระบบอื่นมันจะลบไฟล์ทางกายภาพในระบบนั้น มีความคิดเกิดอะไรขึ้นที่นั่น?
biagidp

2
ในการตอบสนองข้างต้น: ฉันเชื่อว่าปัญหาอยู่ที่ฉันไม่มี. gitignore ในระบบสำรองก่อนที่จะดึงการเปลี่ยนแปลงดังนั้นการลบจึงลบสำเนาในเครื่อง อย่างน้อยนั่นคือทฤษฎี
biagidp

53

หากต้องการหยุดติดตามไฟล์ให้ใช้ไฟล์git rm --cached <filename>.

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


1

เพิ่มไฟล์ gitignore

ดูhttp://git-scm.com/docs/gitignore


13
นี่เป็นเพียงครึ่งหนึ่งของคำตอบ .gitignoreรายการใช้ไม่ได้กับไฟล์ที่กำลังติดตามอยู่
CB Bailey

10
ส่วนที่สองคือgit rm --cached <file>แล้วจึงจะนำออกนี้
Jakub Narębski

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