สำหรับผู้ที่ใช้งาน Git แล้ว คงรู้จัก Folder .git แล้วว่า เป็นที่ที่เก็บ Local Repository ซึ่งเราจะไม่เข้าไปยุ่งกับไฟล์ข้างในนี้กัน
และ Folder .git นั้น ก็ถูกสร้างอยู่ใน Working Directory หรือ Folder งานของเรานั่นเอง ซึ่งมันก็มีความเสี่ยงอยู่พอสมควร วันนี้ผมจึงมาแนะนำวิธีการย้าย .git ไปไว้ที่อื่น เพื่อความปลอดภัยมากขึ้น
ก่อนจะไปดูวิธีการย้ายนั้น ผมขอยกเคสจริง ๆ ของความเสี่ยงต่าง ๆ ที่ได้เจอมาแล้วให้ฟังก่อนนะครับ
ความเสี่ยงเมื่อใช้ Git Local Repository อย่างเดียว
สำหรับงานที่ใช้ Git Local Repo อย่างเดียว แน่นอนว่าต้องมีความเสี่ยงที่เลี่ยงไม่ได้ เช่น
- Harddisk พัง
- เผลอลบ Folder งาน
แค่ 2 เหตุผลนี้ ใช้ Git Local Repo อย่างเดียว ก็มีความเสี่ยงแล้ว
วิธีป้องกันนั้นง่ายมาก แค่ใช้ Git Remote Repo ด้วย จะใช้บน Public Server หรือ Private Server ก็มีให้เลือกมากมาย เช่น GitHub, BitBucket, GitLab หรือทำ Private Git Server ใช้เอง
ความเสี่ยงเมื่อ Working Directory เสียหาย หรือถูกลบ
Working Directory ก็คือ Folder งาน ที่พูดถึงในห้วข้อก่อนหน้า แต่ขอแยกออกมาพูดถึงต่างหาก กรณีที่ไม่ต้องการใช้ Git Remote Repo ด้วยเหตุผลใดก็ตาม
เนื่องจาก Folder .git นั้น อยู่ภายใน Working Directory หากว่ามีเหตุให้ไม่สามารถเข้าถึง Working Directory ได้ หรือถูกลบทิ้งไป เท่ากับว่า Git Local Repo เราหมายไปด้วย
วิธีป้องกันก็ต้องหาทางย้าย Folder .git ไปไว้ที่อื่นซะ
ความเสี่ยงเมื่อ Working Directory สามารถ Access ได้จากที่อื่น
ถ้านึกไม่ออก ให้นึกถึงงานเว็บ ที่เราอาจจะใช้ Git กับตัวเว็บจริง ๆ (ไป Commit บน Server) แล้วไม่ได้ Config ให้ตัว Web Server (เช่น Apache) ไม่แสดงรายชื่อไฟล์ ทำให้เห็นรายชื่อไฟล์ผ่าน Browser ได้

รูปจาก http://stackoverflow.com/questions/27763867/opening-html-files-on-localhost-ubuntu
ถ้าเห็นรายชื่อไฟล์แบบนี้ ก็จะทำให้เข้าถึง Folder .git ผ่าน Browser ได้ Git Repo เราก็ถูกขโมยไปได้ เท่ากับเอาไฟล์เว็บเราไปได้พร้อมประวัติทั้งหมด!! กรณีนี้ จะเห็นว่า มีความเสี่ยงมาก
วิธีป้องกันก็ต้อง Config ให้ Web Server ไม่ทำการแสดงรายชื่อไฟล์ หรือไปเปลี่ยน File Permission หรือย้าย .git ไปไว้ที่ Path อื่น ที่ไม่สามารถเข้าถึงได้ผ่านทาง Browser
วิธีการย้าย .git
หากเราตกอยู่ในความเสี่ยงต่าง ๆ ที่ยกมาให้อ่านแล้วนั้น เราก็ควรย้าย Local Repo หรือ Folder .git ไปไว้ที่อื่นซะ มาดูขั้นตอนกันเลย
ขั้นแรก ทำการย้าย Folder .git ไปไว้ที่ที่ปลอดภัยก่อน ซึ่งเราสามารถ Rename folder เป็นชื่ออื่นได้ด้วย
สำหรับบน Windows ก็ใช้ File Explorer ย้ายไฟล์ไปได้เลย หรือถ้าบน Mac/Linux ก็ใช้คำสั่ง mv
คงไม่ต้องสอนเน๊อะ

หลังจากนั้น ให้สร้างไฟล์ .git ขึ้นมาแทน โดยระบุ Path ของ Local Repo ลงไปในเนื้อไฟล์ ดังนี้
1 |
gitdir: path/to/file.git |
โดยเราสามารถอ้าง Path แบบ Relative หรือ Absolute ก็ได้ แต่สำหรับ Windows ต้องใช้ \
แทน /
นะครับ ตาม OS เลย

จากรูปด้านบน ใช้เทคนิคการใช้คำสั่ง echo บน Git Bash เพื่อพ่นคำใน Double quote ออกมา และ Redirect ไปยังไฟล์ .git เป็นผลให้มีการสร้างไฟล์ .git ขึ้นมา พร้อมเขียนเนื้อไฟล์ตามที่พ่นออกมาทาง echo ลงไป และสำหรับบน Mac/Linux สามารถสั่งบน Terminal/Shell ได้เลย
แค่ 2 ขั้นตอน เราก็สามารถย้าย Local Repo ไปไว้นอก Working Directory ได้แล้ว ต่อจากนี้ หากว่า Working Directory เกิดปัญหา เราก็สามารถสร้างไฟล์ .git ชี้ไปยัง Local Repo ที่ Working Directory ใหม่ แล้วใช้คำสั่ง git reset ...
เพื่อนำ Code ใน commit ที่ต้องการ กลับมายัง Working Directory ได้แล้ว
แถม!!
หากเราย้าย Folder .git ไปยัง Folder ที่มีการ Sync กับพวก Cloud Storage เช่น Dropbox เราก็สามารถที่จะใช้เทคนิคนี้ Backup Local Repo ไว้ได้ด้วย และไป Sync กับเครื่องอื่นที่เราต้องการย้ายงานไปทำได้ โดยไม่ต้องใช้ Git Remote Server เลย
อ้างอิง : Git – Moving the .git directory to another drive, keep the source code where it is