ฉันมีที่เก็บข้อมูลคอมไพล์โฮสต์บน 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