GIT Sparse checkout

หลังจากเริ่มย้ายมาใช้ git ถาวรปัญหาหนึ่งที่เจอแบบไม่คาดคิดคือไฟล์บางไฟล์ใน *nix ไม่สามารถ clone ออกมาได้เพราะข้อจำกัดของระบบไฟล์ Windows ที่ห้ามให้ชื่อไฟล์มีตัวอักษร ‘:’ ซึ่งดันมีอยู่ในบางไฟล์ของ source FreeBSD (ยังมีเรื่องภาษาไทยอีกแต่นั่นต้องแก้อีกวิธี) จนเห็นพี่ @i_nook หา sparse checkout ก็สงสัยว่าใช้ทำอะไรจนมาอ๋อตอนที่เห็น tweet link นี้เข้า ขั้นตอนการทำก็เริ่มจาก

  1. Clone repository ด้วย

    git clone -n /path/to/git
    

    เพื่อ clone ออกมาแต่ไม่ checkout

  2. ตามด้วยกำหนดให้ repository ให้ใช้ sparsecheckout

    git config core.sparsecheckout true
    
  3. กำหนดว่า path ไหนจะ checkout ออกมา

    echo checkout-path/ > .git/info/sparse-checkout
    echo checkout-path2/ >> .git/info/sparse-checkout
    
  4. สุดท้าย checkout ออกมา

    git read-tree -m -u HEAD
    

ข้อดีของวิธีนี้นอกจากจะประหยัดเนื้อที่แล้ว ยังสามารถเลือกไม่เอา path ที่มีปัญหาออกมาได้ด้วย พรุ่งนี้คงได้ลองกับ Tortoise ว่าจะทำได้หรือป่าว แต่ก็น่าจะมี Option ให้ตั้งเหมือนกัน ไว้ถ้าไม่ได้ค่อยมาเพิ่มอีกที

About llun

Just a programmer

,

  • http://twitter.com/visibletrap TAP

    สุดยอดดด (หรือเปล่าต้องรอดูผล)

    • Anonymous

      แต่ประหยัดที่เพราะไม่ต้อง checkout ส่วน FreeBSD ออกมาก็ประทับใจและ (อันนี้ลองแล้วในเครื่อง)

    • http://twitter.com/visibletrap TAP

      เห็นจากเรื่องนี้และหลายๆอย่าง รู้สึกว่ามันเขียนด้านล่างมาได้ flexible มากเลยอะ ถึง adapt ไปได้ทุกอย่างที่ต้องการแบบนี้

  • http://twitter.com/visibletrap TAP

    สุดยอดดด (หรือเปล่าต้องรอดูผล)

    • Anonymous

      แต่ประหยัดที่เพราะไม่ต้อง checkout ส่วน FreeBSD ออกมาก็ประทับใจและ (อันนี้ลองแล้วในเครื่อง)

    • http://twitter.com/visibletrap TAP

      เห็นจากเรื่องนี้และหลายๆอย่าง รู้สึกว่ามันเขียนด้านล่างมาได้ flexible มากเลยอะ ถึง adapt ไปได้ทุกอย่างที่ต้องการแบบนี้