ในแต่ละ Repository ไม่ว่าจะเป็นของใครก็มักจะเห็นไฟล์ .gitignore อยู่ออกบ่อย ถ้าแปลตรงตัวเล ยก็จะได้ว่า “Git ไม่สนใจ” ว่าแต่ไฟล์นี้เป็นการบอกให้ Git ไม่สนใจอะไร แล้วทำไมต้องไม่สนใจด้วย?
มีไว้ระบุไฟล์ที่ไม่อยากให้เอาเข้าไปเก็บใน Repository
รู้กันดีว่า Repository ทำหน้าที่เป็นที่เก็บโค้ดของเรา แต่ว่าในโปรเจคของเราไม่ได้มีแค่ไฟล์ของเราเท่านั้น จะมีไฟล์จากแพคเกจภายนอก หรือไฟล์การ Build ซึ่งเราไม่ควรเอาไปเก็บรวมใน Repository
แต่ก็มีบางไฟล์ของโปรเจคเรา ที่ไม่อยากให้เอาเข้าไปเก็บใน Repository เหมือนกัน นั่นก็คือพวกความลับ เช่น คีย์ API ซึ่งหาก Repository เราเปิดเป็นสาธารณะคนอื่นก็จะมาเอาคีย์พวกนั้นไปใช้ได้ หรือถึงแม้จะไม่ได้เป็นสาธารณะการไม่นำขึ้นไปก็อาจช่วยลดความเสี่ยงที่คีย์จะรั่วไหลออกไปได้อีกระดับ
แล้วมีไฟล์อะไรบ้างที่ไม่อยากให้เก็บ?
1. ไฟล์ที่มีความลับ
ข้อมูลความลับส่วนใหญ่ที่จะใช้งานในโปรเจคต่าง ๆ มักจะเป็นพวกคีย์ API, ชื่อผู้ใช้/รหัสผ่านฐานข้อมูล, Client ID/Secret และอื่น ๆ
ซึ่งพวกนี้มักจะอยู่ในไฟล์ที่ไว้เก็บการตั้งค่าแอปฯ เช่น .env
, appsettings.json
, local.settings.json
โดยชื่อและประเภทไฟล์จะต่างกันไปตามภาษา/เฟรมเวิร์คที่ใช้งาน
2. ไฟล์ที่ถูกสร้างโดยอัตโนมัติ
เป็นพวกไฟล์ที่เราไม่ได้เป็นคนสร้างเอง เช่น ไฟล์ที่เกิดจากการ Build หรือ Compile ตัวแอปฯ ที่ผลลัพธ์เกิดจากตัวโค้ดที่อยู่ใน Repository เดียวกัน จึงไม่จำเป็นที่จะต้องนำเข้าไปด้วยให้เปลืองที่จัดเก็บ
แต่ก็มีไฟล์บางกลุ่มที่สร้างโดยอัตโนมัติแต่ต้องเก็บรวมเข้าไปใน Repository ด้วย จะเป็นเช่นไฟล์ package-lock.json ที่สร้างโดย NPM มีจุดประสงค์เพื่อเก็บเวอร์ชันของแพคเกจไว้ เพื่อจะได้มั่นใจว่าเวลาคนอื่นมารันคำสั่ง npm install จะทำการลงแพคเกจเวอร์ชันเดียวกับที่ได้ลงไว้ในตอนแรก
3. ไฟล์แพคเกจ
ไฟล์แพคเกจที่ลงผ่าน Package Manager ต่าง ๆ เช่น NPM, NuGet, PyPi, Composer และอื่น ๆ เมื่อรวมกันหลาย ๆ แพคเกจแล้วมักจะไฟล์จำนวนมาก และมีขนาดใหญ่ ซึ่งให้ผู้ที่ Clone Repository ไปลงเองน่าจะสะดวกและเร็วกว่า แถมยังไม่เปลืองพื้นที่จัดเก็บอีกด้วย
4. ไฟล์ที่เจาะจงผู้ใช้
บางไฟล์ที่ใช้งานได้อยู่แค่คอมพิวเตอร์เครื่องเดียว เช่น การตั้งค่า IDE ก็ไม่ควรนำเข้าไปเพราะนอกจากคนอื่นเอาไปใช้ไม่ได้แล้ว ยังรก Repository อีก
ตัวอย่างไฟล์ .gitignore
จะเป็นดังในรูปนี้ เป็นการระบุชื่อไฟล์หรือโฟลเดอร์เข้าไปได้เลย หรือจะใส่เป็นรูปแบบของชื่อไฟล์ก็ได้
แล้วตัวไฟล์ .gitignore ต้องเอามาจากไหน?
- หากใช้เฟรมเวิร์คหรือสร้างโปรเจคผ่าน CLI ส่วนใหญ่มักจะมีไฟล์ .gitignore มาให้อยู่แล้ว สามารถเอาไปปรับแต่งเพิ่มเติมให้เข้ากับตัวโปรเจคได้อีก
- ถ้าไม่มีมาให้ก็สามารถไปหามาได้ จะค้นหา Google ตรงเลยก็ได้ หรือถ้าพึ่งจะสร้าง Repository ใน GitHub ก็สามารถเลือกจาก Template ที่มีไว้ให้เลยก็ได้ แต่ถ้าโปรเจคใช้หลากหลายภาษา/เฟรมเวิร์ค ก็เข้าไปเลือกใน https://gitignore.io เพื่อให้ช่วยสร้างได้
- หรือถ้าตัวเลือกทั้งสองไม่ตอบโจทย์ก็สร้างเองเลย เอาที่ได้จากสองข้อบนมาเป็นจุดเริ่มต้นแล้วปรับแต่งให้เข้ากับโปรเจคเราก็ได้
บางไฟล์ก็อยากเก็บไว้ ทำอย่างไรดี?
เทคนิคเพิ่มเติมสำหรับบางไฟล์ที่อยากเก็บไว้ใน Repository เช่น พวกไฟล์ตั้งค่าต่าง ๆ ที่จำเป็นต่อการทำงาน แต่ก็มักจะมีพวกความลับอยู่ในไฟล์นั้น
วิธีแก้ไขก็คือคัดลอกตัวไฟล์จริงขึ้นมาแล้วทำการลบพวกที่เป็นความลับออก จากนั้นเติม .example หรือ .sample ต่อท้ายเข้าไปเพื่อให้ไม่ตรงกับชื่อไฟล์ใน .gitignore จากนั้นก็นำเข้า Repository ได้เลย
คราวนี้เมื่อมีผู้อื่น (หรือเราเองนี่แหละ) จะ Clone Repository มาทำงาน ก็เพียงแค่คัดลอกไฟล์มาและลบ .example/.sample ออก แล้วกรอกข้อมูลที่เป็นความลับเข้าไปก็จะใช้งานได้เลย ไม่ต้องมาเดาว่าไฟล์อะไรหายไป หรือไฟล์นี้หน้าตาเป็นอย่างไรอีกต่อไป
เนื้อหานี้ถูกเผยแพร่ครั้งแรกในรูปแบบของโพสท์ Facebook เพื่อให้ง่ายต่อการสืบค้นจึงนำมาจัดเก็บในรูปแบบบทความด้วย