หลังจากเริ่มย้ายมาใช้ git ถาวรปัญหาหนึ่งที่เจอแบบไม่คาดคิดคือไฟล์บางไฟล์ใน *nix ไม่สามารถ clone ออกมาได้เพราะข้อจำกัดของระบบไฟล์ Windows ที่ห้ามให้ชื่อไฟล์มีตัวอักษร ‘:’ ซึ่งดันมีอยู่ในบางไฟล์ของ source FreeBSD (ยังมีเรื่องภาษาไทยอีกแต่นั่นต้องแก้อีกวิธี) จนเห็นพี่ @i_nook หา sparse checkout ก็สงสัยว่าใช้ทำอะไรจนมาอ๋อตอนที่เห็น tweet link นี้เข้า ขั้นตอนการทำก็เริ่มจาก
-
Clone repository ด้วย
git clone -n /path/to/git
เพื่อ clone ออกมาแต่ไม่ checkout
-
ตามด้วยกำหนดให้ repository ให้ใช้ sparsecheckout
git config core.sparsecheckout true
-
กำหนดว่า path ไหนจะ checkout ออกมา
echo checkout-path/ > .git/info/sparse-checkout echo checkout-path2/ >> .git/info/sparse-checkout
-
สุดท้าย checkout ออกมา
git read-tree -m -u HEAD
ข้อดีของวิธีนี้นอกจากจะประหยัดเนื้อที่แล้ว ยังสามารถเลือกไม่เอา path ที่มีปัญหาออกมาได้ด้วย พรุ่งนี้คงได้ลองกับ Tortoise ว่าจะทำได้หรือป่าว แต่ก็น่าจะมี Option ให้ตั้งเหมือนกัน ไว้ถ้าไม่ได้ค่อยมาเพิ่มอีกที