ลบโฟลเดอร์ออกจากการติดตามคอมไพล์


404

ฉันต้องแยกโฟลเดอร์ (อัปโหลดชื่อ) ออกจากการติดตาม ฉันพยายามวิ่ง

git rm -r --cached wordpress/wp-content/uploads

และหลังจากนั้นฉันเพิ่มเส้นทางไปยัง. gitignore

/wordpress/wp-content/uploads

แต่เมื่อฉันวิ่งgit statusพวกเขาปรากฏขึ้นเป็นลบ หากฉันพยายามส่งการเปลี่ยนแปลงไฟล์จะถูกลบไม่เพียง แต่ถูกลบออกจากการติดตาม

ผมทำอะไรผิดหรือเปล่า?

ฉันได้ลองแล้ว

git update-index --assume-unchanged <file>

แต่ดูเหมือนว่าจะยกเลิกการติดตามไฟล์เท่านั้น แต่ฉันต้องลบทั้งโฟลเดอร์ (รวมถึงโฟลเดอร์ย่อย) ออกจากการติดตาม


การลบไม่ได้หมายความว่า git กำลังจะลบไฟล์ของคุณ อย่างไรก็ตามหากคุณจะใช้reset --hardมันจะ
keltar

2
ตามที่ @keltar กล่าวถึงการกระทำจะไม่ทำให้ไฟล์ของคุณถูกลบ มันจะทำการลบออกจาก Gitแต่สำเนาการทำงานของคุณจะยังคงมีอยู่ แต่ถ้าคุณpullทำเช่นนั้นไฟล์เหล่านั้นจะถูกลบออกจากระบบใหม่
Chris

คำตอบ:


867

ฉันเจอคำถามนี้ในขณะที่ Googling สำหรับ "git ลบโฟลเดอร์จากการติดตาม" คำถามของ OP ทำให้ฉันได้รับคำตอบ ฉันกำลังสรุปที่นี่สำหรับคนรุ่นอนาคต

คำถาม

ฉันจะลบโฟลเดอร์ออกจากที่เก็บ git ของฉันได้อย่างไรโดยไม่ต้องลบออกจากเครื่องท้องถิ่นของฉัน (เช่นสภาพแวดล้อมการพัฒนา)

ตอบ

ขั้นตอน 1. เพิ่มเส้นทางโฟลเดอร์ไปยัง.gitignoreไฟล์รากของ repo ของคุณ

path_to_your_folder/

ขั้นตอนที่ 2 ลบโฟลเดอร์ออกจากการติดตามคอมไพล์ในพื้นที่ของคุณ แต่เก็บไว้ในดิสก์ของคุณ

git rm -r --cached path_to_your_folder/

ขั้นตอนที่ 3 ผลักดันการเปลี่ยนแปลงของคุณไปที่ repo คอมไพล์

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


2
คำถามด่วนพา ธ โฟลเดอร์ต้องเป็นพา ธ เต็มหรือไม่ หรือเพียงแค่เส้นทางที่มีที่เก็บ git ทำหน้าที่เป็นฐาน?
HMSCelestia

ฉันเชื่อว่ามันเป็นเส้นทางที่สมบูรณ์ แต่จำไม่ได้แน่นอน
ท็อด Birdsall

7
"และผู้คนที่ดึงจาก repo นี้จะได้รับไฟล์ที่ถูกลบออกจากต้นไม้" ฉันจะป้องกันได้หรือไม่
Leo Gasparrini

สิ่งนี้ลบไฟล์ของฉันอย่างถูกต้องจากการติดตามในสาขา แต่ลบออกหลังจากผสาน!
แฮโรลด์

1
สำหรับฉันยังคงอยู่ นอกจากนี้ - ฉันควรยกเลิกการเลือกไฟล์เหล่านั้นเมื่อรับสิ่งที่อยู่ในโฟลเดอร์? ฉันลองทั้งสองวิธี หากยกเลิกการเลือกจะไม่อนุญาตให้ทำการพุช แต่จากนั้นฉันเปลี่ยนถ่านหนึ่งอันในไฟล์อื่นที่ควรติดตาม ยังไม่ช่วย
Darius.V

44

สิ่งนี้ใช้ได้กับฉัน:

git rm -r --cached --ignore-unmatch folder_name

--ignore-unmatch เป็นสิ่งสำคัญที่นี่หากไม่มีตัวเลือกนั้นคอมไพล์จะออกโดยมีข้อผิดพลาดในไฟล์แรกที่ไม่ได้อยู่ในดัชนี


unknown option 'ignore unmatched'
Inigo

นี่คือการตั้งค่าสถานะที่สำคัญหากไดเรกทอรีนั้นว่างเปล่าขอบคุณ!
MNN

มีประโยชน์มากหากคุณต้องการลบนามสกุลไฟล์บางไฟล์ออกจากไดเรกทอรีด้วย:git rm -r --cached --ignore-unmatch .idea/*.xml
takanuva15

14

หากต้องการลืมไดเรกทอรีเพิ่มซ้ำ/*/*ในเส้นทาง:

git update-index --assume-unchanged wordpress/wp-content/uploads/*/*

การใช้git rm --cachedไม่ดีสำหรับการทำงานร่วมกัน รายละเอียดเพิ่มเติมได้ที่นี่: จะหยุดติดตามและเพิกเฉยต่อการเปลี่ยนแปลงของไฟล์ใน Git ได้อย่างไร?


1
นี่เป็นทางออกที่หรูหรามาก! เคล็ดลับเส้นทางเวียนซ้ำช่วยชีวิตฉันไว้ ขอบคุณ!
Aziz Alto

8

ฉันรู้ว่านี่เป็นเธรดเก่า แต่ฉันต้องการเพิ่มเพียงเล็กน้อยเนื่องจากโซลูชันที่ทำเครื่องหมายไว้ไม่ได้แก้ปัญหาให้ฉัน (แม้ว่าฉันจะลองหลายครั้ง)

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

  1. ทำการสำรองข้อมูลของโฟลเดอร์ในเครื่องและเก็บไว้ในที่ปลอดภัย
  2. ลบโฟลเดอร์ออกจาก repo ท้องถิ่นของคุณ
  3. ตรวจสอบให้แน่ใจว่าล้างแคชแล้ว git rm -r --cached your_folder/
  4. เพิ่มyour_folder/. gitignore
  5. กระทำการเปลี่ยนแปลง
  6. เพิ่มการสำรองข้อมูลกลับเข้าไปใน repo ของคุณ

คุณควรเห็นว่าโฟลเดอร์นั้นไม่มีการติดตามอีกต่อไป

อย่าถามฉันว่าทำไมการล้างแคชไม่ได้ผลสำหรับฉันฉันไม่ใช่ตัวช่วยสร้าง Git ขั้นสูง แต่นี่เป็นวิธีที่ฉันจะแก้ไขปัญหาได้


ขอบคุณ!!! Git ทำให้ฉันบ้าโดยไม่สนใจโฟลเดอร์ eclipse .metadata ทำตามขั้นตอนของคุณด้วยโฟลเดอร์ eclipse .metadata และในที่สุดก็ใช้งานได้
MasterN8

5

จากเอกสาร git:

อีกสิ่งที่มีประโยชน์ที่คุณอาจต้องการทำคือเก็บไฟล์ไว้ในแผนผังการทำงานของคุณ แต่ลบออกจากพื้นที่จัดเตรียม คุณอาจต้องการเก็บไฟล์ไว้ในฮาร์ดไดรฟ์ของคุณ แต่ไม่มี Git ติดตามอีกต่อไป สิ่งนี้มีประโยชน์อย่างยิ่งหากคุณลืมที่จะเพิ่มบางสิ่งลงในไฟล์. gitignore ของคุณและทำการจัดฉากโดยไม่ตั้งใจเช่นไฟล์บันทึกขนาดใหญ่หรือไฟล์ที่คอมไพล์เป็น. a ไฟล์ หากต้องการทำสิ่งนี้ให้ใช้ตัวเลือก --cached:

$ git rm --cached readme.txt

ดังนั้นอาจไม่รวม "-r" ด้วย?


1
--cachedสหกรณ์พยายามแล้ว -rตัวเลือกสำหรับ "recursive" ซึ่งควรจะรวมอยู่ในกรณีนี้
Chris

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