ฉันมีที่เก็บข้อมูลคอมไพล์โฮสต์บน Github หลังจากก่อไฟล์จำนวนมากฉันรู้ว่าฉันต้องสร้าง.gitignoreและยกเว้น.exe,.objไฟล์
อย่างไรก็ตามมันจะลบไฟล์ที่ได้รับมอบหมายเหล่านี้ออกจากพื้นที่เก็บข้อมูลโดยอัตโนมัติหรือไม่? มีวิธีการบังคับใด ๆ
ฉันมีที่เก็บข้อมูลคอมไพล์โฮสต์บน Github หลังจากก่อไฟล์จำนวนมากฉันรู้ว่าฉันต้องสร้าง.gitignoreและยกเว้น.exe,.objไฟล์
อย่างไรก็ตามมันจะลบไฟล์ที่ได้รับมอบหมายเหล่านี้ออกจากพื้นที่เก็บข้อมูลโดยอัตโนมัติหรือไม่? มีวิธีการบังคับใด ๆ
คำตอบ:
ไม่คุณไม่สามารถบังคับไฟล์ที่ถูกคอมมิทใน repo ที่จะถูกลบเพียงเพราะมันถูกเพิ่มเข้าไปใน .gitignore
คุณต้องgit rm --cachedลบไฟล์ที่คุณไม่ต้องการใน repo (- เก็บไว้เนื่องจากคุณอาจต้องการเก็บสำเนาในเครื่อง แต่ลบออกจาก repo) ดังนั้นหากคุณต้องการลบ exe ทั้งหมดออกจาก repo ของคุณ
git rm --cached /\*.exe
(โปรดทราบว่าเครื่องหมายดอกจัน * ถูกยกมาจากเชลล์ซึ่งจะช่วยให้คอมไพล์และไม่ใช่เชลล์ให้ขยายชื่อพา ธ ของไฟล์และไดเรกทอรีย่อย)
git rm /\*.exeมันจะลบ exe ทั้งหมดใน repo ของคุณ
gitพวกเขากำลังมีดอกจันที่จะหลบหนีเพื่อป้องกันไม่ให้เปลือกจากการตีความมันเป็นมันมีไว้สำหรับ
git pullจะเห็นไฟล์ของพวกเขาถูกลบ
อย่างไรก็ตามมันจะลบไฟล์ที่ได้รับมอบหมายเหล่านี้ออกจากพื้นที่เก็บข้อมูลโดยอัตโนมัติหรือไม่?
ไม่แม้แต่กับไฟล์ที่มีอยู่แล้ว.gitignoreคุณก็ยังสามารถ "ละเว้น" ไฟล์ด้วย-fแฟล็ก (บังคับ) หากไฟล์เหล่านั้นถูกผูกมัดแล้วไฟล์เหล่านั้นจะไม่ถูกลบโดยอัตโนมัติ
git rm --cached path/to/ignored.exe
หากคุณยังไม่ได้ทำการเปลี่ยนแปลง:
git rm -r --cached .
git add .
git commit -m 'clear git cache'
git push
ฉันต้องลบ. aia และโฟลเดอร์เป้าหมายและหลังจากอ่านความคิดเห็นทั้งหมดแล้วสิ่งนี้ก็ใช้ได้กับฉัน:
git rm -r .idea
git rm -r target
git commit -m 'removed .idea folder'
จากนั้นผลักไปที่ต้นแบบ
.ideaเป็นปัญหาของฉันฉันคิดว่ามันก็เป็นของคุณด้วย:)
อย่างไรก็ตามมันจะลบไฟล์ที่ได้รับมอบหมายเหล่านี้ออกจากพื้นที่เก็บข้อมูลโดยอัตโนมัติหรือไม่?
เลขที่
สูตร 'ที่ดีที่สุด' ในการทำเช่นนี้ใช้git filter-branchตามที่เขียนไว้ที่นี่:
หน้าคนสำหรับ git-filter-branch มีตัวอย่างที่ครอบคลุม
หมายเหตุคุณจะเขียนประวัติศาสตร์อีกครั้ง หากคุณเผยแพร่การแก้ไขใด ๆ ที่มีไฟล์ที่เพิ่มโดยไม่ได้ตั้งใจสิ่งนี้อาจสร้างปัญหาให้กับผู้ใช้สาขาสาธารณะเหล่านั้นได้ แจ้งให้พวกเขาทราบหรืออาจคิดว่าคุณต้องการลบไฟล์อย่างรุนแรงเพียงใด
หมายเหตุในที่ที่มีแท็กให้ใช้--tag-name-filter catตัวเลือกgit filter-branchเสมอ มันไม่เคยเจ็บปวดและจะช่วยให้คุณปวดหัวเมื่อคุณรู้ในภายหลังว่าคุณต้องการมัน
--allการเขียนทั้งหมด (ท้องถิ่น) สาขาในครั้งเดียว
แม้หลังจากที่คุณลบไฟล์แล้วคอมมิทคุณก็ยังมีไฟล์เหล่านั้นอยู่ในประวัติ ในการลบเหล่านั้นพิจารณาใช้BFG Repo-ทำความสะอาด มันเป็นทางเลือกแทน git-filter-branch