PlusMagi's Blog By Pitt Phunsanit

Git + SVN: วิธีเก็บโฟลเดอร์ SVN ซ้อนใน Git สำหรับนักพัฒนา WordPress Plugin (ฉบับคลีน 100%)

ถ้าคุณเป็นนักพัฒนาสาย WordPress ที่เพิ่งได้รับอนุมัติปลั๊กอินให้ขึ้นสู่ WordPress.org Plugin Directory คุณจะต้องพบกับความจริงข้อหนึ่งที่หนีไม่พ้น นั่นคือ… “โลกภายนอกเขาใช้ Git กันหมดแล้ว แต่ระบบหลักของ WordPress.org ยังคงบังคับให้เราส่งโค้ดผ่าน SVN (Subversion)”

ปัญหายอดฮิตที่ตามมาคือ โครงสร้างโปรเจกต์มักจะถูกวางไว้ให้โฟลเดอร์ SVN/ (ที่ดึงมาจาก WordPress Subversion) ซ้อนอยู่ข้างในโฟลเดอร์หลักที่เป็น Git Repository อีกที เพื่อความสะดวกในการทำงาน

แต่พอเราจัดการเขียนไฟล์ .gitignore ข้ามโฟลเดอร์ SVN ไปเลยเพื่อความปลอดภัย… ปรากฏว่า Git ก็มองไม่เห็นเวอร์ชันที่พร้อมปล่อยของฝั่ง SVN เลยสักนิด! ครั้นจะปล่อยให้ Git เข้ามาสแกนตรง ๆ ฐานข้อมูล Git ก็บวมเบ่งเพราะไฟล์ระบบ Temp ของ SVN (.svn) โผล่เข้ามาทำรกสายตา

วันนี้เราจะมาแชร์วิธี “เปิดประตูให้ Git เก็บเฉพาะไฟล์ซอร์สโค้ดสำคัญใน SVN แต่กรองไฟล์ขยะระบบออกไป 100%” กันครับ


🛠️ โครงสร้างโฟลเดอร์ที่เราต้องการจัดการ

สมมติว่าคุณวางโครงสร้างโปรเจกต์แบบนี้ (ซึ่งเป็นโครงสร้างที่ดีและเป็นระเบียบมากในการพัฒนาปลั๊กอิน)

my-wordpress-plugin/ (Git Main Directory)
├── .git/
├── .gitignore
├── plusmagi-tags-reindex.php (โค้ดฝั่งพัฒนาหลัก)
├── js/
│   └── plusmagi-tags-reindex.tsx
└── SVN/ (โฟลเดอร์ย่อยที่ผูกกับ WordPress.org SVN)
    ├── .svn/ (ไฟล์ระบบ/Metadata ของ SVN - ห้ามเก็บลง Git!)
    └── trunk/
        ├── plusmagi-tags-reindex.php (โค้ดฝั่งเตรียมปล่อยของ)
        └── js/
            └── plusmagi-tags-reindex.js

📝 วิธีตั้งค่า .gitignore เพื่อผลลัพธ์ที่สมบูรณ์แบบ

ความผิดพลาดส่วนใหญ่เกิดจากการที่เรายัดคำสั่ง SVN/ ลงไปตรง ๆ ใน .gitignore ซึ่งเป็นการสั่งให้ Git ปิดประตูลงกลอนถาวร ไม่ให้เข้าไปยุ่งในโฟลเดอร์นั้นเลย

วิธีแก้ที่ถูกต้องคือ ให้ลบบรรทัด SVN/ ออก แล้วเปลี่ยนมาเจาะจงเฉพาะไฟล์ระบบแทน ด้วยการปรับแต่ง .gitignore ดังนี้:

# ============================================================================
# SVN Mirror / Metadata Configuration
# ============================================================================

# เปิดทางให้ Git เข้าไปสแกนไฟล์ในโฟลเดอร์ SVN ได้ 
# (ห้ามมีบรรทัด SVN/ โดด ๆ เด็ดขาด)

# ปิดตายไม่ให้ Git แอบเก็บไฟล์ระบบและ Metadata ภายในของ SVN 
.svn/
**/.svn/
**/.backup/

# กันไว้ดีกว่าแก้: ปิดไม่ให้ Git เก็บโฟลเดอร์สร้างเองที่อาจจะหลุดไปอยู่ใน SVN ตอนรัน Build
SVN/**/node_modules/
SVN/**/dist/

🚀 ผลลัพธ์หลังการตั้งค่า (The Clean State)

หลังจากที่คุณปรับแต่ง .gitignore ใหม่แล้ว เมื่อลองรันคำสั่งตรวจสอบสถานะผ่าน Terminal
git status
คุณจะพบกับความฟินระดับ 100% บนหน้าจอทันที! เพราะ

  1. ในช่อง Untracked files: Git จะเริ่มฉลาดพอที่จะมองทะลุเข้าไปตามเก็บเฉพาะไฟล์ซอร์สโค้ดสำคัญที่อยู่ใน SVN/trunk/ เช่น ไฟล์ .php, .txt หรือ .tsx ที่คุณเพิ่งแก้ไขเสร็จเรียบร้อย
  2. โฟลเดอร์ระบบ .svn หายไปไหน?: โฟลเดอร์ซ่อนและไฟล์ Temp ทั้งหมดของฝั่ง SVN (ซึ่งปกติจะมีขนาดใหญ่และซ้ำซ้อนมาก) จะถูกกรองทิ้งไปอย่างถาวร ไม่โผล่มาให้รกหูรกตาหรือทำให้ฐานข้อมูล Git ของคุณบวมเบ่ง

💡 ประโยชน์ของการยอมให้เกิด “ความซ้ำซ้อนที่ตั้งใจ”

นักพัฒนาบางคนอาจจะแย้งว่า “แบบนี้ใน Git ก็จะมีโค้ด 2 ชุดน่ะสิ? ชุดนึงอยู่ Root ด้านนอก อีกชุดอยู่ใน SVN”

ขอบอกเลยครับว่า นี่คือข้อดีขั้นสุดในการวาง Workflow สาย WordPress Plugin! เพราะ

การทำแบบนี้ทำให้ประวัติการ Commit บน Git (git log) ของคุณสามารถบันทึกไทม์ไลน์ได้อย่างชัดเจนและเป็นระเบียบมาก ว่าโค้ดฝั่งพัฒนาถูกอัปเดตไปถึงไหน และโค้ดเวอร์ชันทางการที่ปล่อยให้คนทั่วโลกดาวน์โหลดถูกส่งขึ้นระบบเมื่อไหร่… โดยไม่มีไฟล์ขยะระบบ SVN มาทำประวัติ Git เสียเลยสักบรรทัดเดียว!

ลองเอาเทคนิคนี้ไปปรับใช้กับโปรเจกต์ของคุณดูครับ คลีน สบายตา และจัดการง่ายขึ้นแน่นอน! 🚀

#WordPress #Git #SVN #WebDevelopment #CleanCode #DeveloperTips


อ่านเพิ่มเติม

Exit mobile version