เป็นไปได้หรือไม่ที่จะ "รีเฟรช" ที่เก็บ git หลังจากอัพเดตไฟล์ gitignore?
ฉันเพิ่งเพิ่มการไม่สนใจ (?) ไปยัง gitignore ของฉันและต้องการที่จะลบสิ่งที่มีอยู่แล้วใน repo ที่ตรงกับไฟล์ใหม่
เป็นไปได้หรือไม่ที่จะ "รีเฟรช" ที่เก็บ git หลังจากอัพเดตไฟล์ gitignore?
ฉันเพิ่งเพิ่มการไม่สนใจ (?) ไปยัง gitignore ของฉันและต้องการที่จะลบสิ่งที่มีอยู่แล้วใน repo ที่ตรงกับไฟล์ใหม่
คำตอบ:
วิธีการแก้ปัญหาที่กล่าวถึงใน " ไฟล์. gitignore not ละเลย " เป็นบิตที่รุนแรง แต่ควรทำงาน:
# rm all files
git rm -r --cached .
# add all files as per new .gitignore
git add .
# now, commit for new .gitignore to apply
git commit -m ".gitignore is now working"
( ให้แน่ใจว่าการกระทำครั้งแรกที่การเปลี่ยนแปลงของคุณคุณต้องการเก็บไว้เพื่อหลีกเลี่ยงเหตุการณ์ที่เกิดขึ้นใด ๆ ที่เป็นjball037 ความคิดเห็นด้านล่าง . ตัวเลือกที่จะเก็บไฟล์ของคุณแตะต้องบนดิสก์ของคุณแม้ว่า.)--cached
นอกจากนี้คุณยังมีโซลูชันที่ละเอียดยิ่งขึ้นในโพสต์บล็อก "การทำให้ Git ไม่สนใจไฟล์ที่ถูกติดตามแล้ว ":
git rm --cached `git ls-files -i --exclude-standard`
Bassimแนะนำในการแก้ไขของเขา :
ในกรณีที่คุณได้รับข้อความแสดงข้อผิดพลาดเช่น
fatal: path spec '...' did not match any files
อาจมีไฟล์ที่มีช่องว่างในเส้นทางของพวกเขาคุณสามารถลบไฟล์อื่น ๆ ด้วยตัวเลือก
--ignore-unmatch
:
git rm --cached --ignore-unmatch `git ls-files -i --exclude-standard`
แต่ไฟล์ที่ไม่ตรงกันจะยังคงอยู่ในที่เก็บของคุณและจะต้องถูกลบออกอย่างชัดเจนโดยใส่เส้นทางของพวกเขาด้วยเครื่องหมายคำพูดคู่:
git rm --cached "<path.to.remaining.file>"
ฉันอาจเข้าใจผิด แต่คุณพยายามลบไฟล์ที่ถูกละเลยใหม่หรือคุณต้องการเพิกเฉยต่อการแก้ไขไฟล์เหล่านี้ใหม่หรือไม่? ในกรณีนี้สิ่งกำลังทำงาน
หากคุณต้องการลบไฟล์ที่ถูกเพิกเฉยก่อนหน้านี้ให้ยอมรับใช้
git rm –cached `git ls-files -i –exclude-standard`
git commit -m 'clean up'
git ls-files -i –exclude-standard
คอมไพล์คอมมิท - ทำความสะอาด ''
ฉันรู้ว่านี่เป็นคำถามเก่า แต่โซลูชันของ gracchus ไม่ทำงานหากชื่อไฟล์มีช่องว่าง โซลูชันของ VonC สำหรับชื่อไฟล์ที่มีช่องว่างคือการไม่ลบออกโดยใช้ประโยชน์--ignore-unmatch
จากนั้นลบด้วยตนเอง แต่จะไม่ทำงานได้ดีหากมีจำนวนมาก
นี่คือทางออกที่ใช้ bash arrays เพื่อบันทึกไฟล์ทั้งหมด
# Build bash array of the file names
while read -r file; do
rmlist+=( "$file" )
done < <(git ls-files -i --exclude-standard)
git rm –-cached "${rmlist[@]}"
git commit -m 'ignore update'