ใช้ Git LFS จัดการกับไฟล์ขนาดใหญ่

ไม่ว่าจะเป็นความตั้งใจ หรือบังเอิญที่ต้องมีการใส่ไฟล์ประเภทภาพ เสียง หรือวิดีโอเข้าไปยัง git repository ถ้าไฟล์เหล่าไม่ได้มีจำนวนเยอะ มีการอัพเดตบ่อยๆ หรือมีขนาดใหญ่ ก็คงไม่ต้องซีเรียสอะไรมากปล่อยผ่านไปก็ได้ แต่ถ้าเกิดต้องมีการอัพเดตไฟล์อยู่บ่อยๆ ขนาดไฟล์ก็ใหญ่ขึ้นเรื่อยๆ อันนี้แหละเราจะต้องมาดูก่อนหน่อย เพราะมีผลกระทบที่เกิดขึ้นกับ git repository ของเราแน่ๆ ไม่ว่าจะเป็น git history ที่จะใหญ่ขึ้นตาม การ pull หรือ fetch ข้อมูลก็จะช้าขึ้นนั้นเอง

สำหรับวิธีการแก้ปัญหารการต้องอัพไฟล์ขนาดใหญ่เข้าไปใน git repository ของเราก็สามารถทำได้โดยใช้ Git LFS (Large File Storage) ซึ่งเป็น extension หนึ่งของ Git โดยหลักการทำงานของ Git LFS จะ hook event เมื่อมีการ push ไฟล์ไปยัง git repository และแทนที่ไฟล์จริงๆ ด้วย pointer ของไฟล์ ด้วยการอัพโหลดไปยัง Git LFS Store

วิธีใช้งาน

  • ดาว์นโหลดตัวติดตั้งจากที่นี่
    • ถ้าเป็น Mac หรือ Linux ก็ติดตั้งผ่าน package manger
    • ส่วน Windows ก็ไม่ต้องทำอะไรเพิ่ม เพราะ Git LFS ติดตั้งมาพร้อมกับ Git ตั้งแต่แรกอยู่แล้ว
  • ติดตั้ง Git LFS ให้กับ repository ซึ่งสามารถใช้ได้ทั้งกับ repository ใหม่ หรือของเดิมที่มีอยู่แล้ว
$ git lfs install
  • กำหนดประเภทไฟล์ที่ต้องการให้จัดการโดย Git LFS
$ git lfs track "*.jpg"
  • จากนั้น Git LFS จะสร้างไฟล์ .gitattributes ขึ้นมา
*.png filter=lfs diff=lfs merge=lfs -text
  • ใช้งาน git repository ตามปกติ แต่อย่าลืมเพิ่ม .gitattributes เข้าไปด้วย
$ git add .gitattributes *.jpg
$ git commit -m "track *.jpg files using Git LFS"
  • เมื่อมีการ push ไฟล์ขึ้นไปยัง server Git LFS จะดักจับและตรวจสอบประเภทไฟล์ที่ตรงตามที่กำหนดไว้ และทำการอัพโหลดไฟล์ขึ้นไปยัง Git LFS Store แทน สังเกตได้จากรูปด้านล่าง

cmd3

  • ตรวจสอบไฟล์ที่จัดการโดย Git LFS
$ git lfs ls-files

References