Skip to content

PlusMagi's Blog By Pitt Phunsanit

Plus emotional magic to the knowledge of logic.

  • About’s Pitt
Close Button

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

2011-03-202011-03-20| phunsanitphunsanit| 0 Comment | 07:00

ถ้าคุณเป็นนักพัฒนาสาย 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! เพราะ

  • ฝั่ง Git Root (ด้านนอก): ทำหน้าที่เป็นสนามเด็กเล่น (Development Sandbox) ให้คุณแก้โค้ด รันเทส หรือ refactor โค้ดได้อย่างอิสระโดยไม่ต้องกังวล
  • ฝั่ง SVN/trunk (ด้านใน): ทำหน้าที่เป็นพื้นที่เตรียมปล่อยของ (Staging Area) เมื่อคุณมั่นใจว่าโค้ดด้านนอกนิ่งและเสถียร 100% แล้ว ค่อยสั่งก๊อปปี้หรือคอมไพล์ตัวจบโยนเข้ามาในโฟลเดอร์นี้ เพื่อเตรียมรันคำสั่ง svn commit ส่งขึ้น WordPress.org เท่านั้น

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

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

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


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

  • WinGet: การติดตั้ง TortoiseSVN
  • GitHub: Repository (repo )รายละเอียด
  • GIT: ละเว้นไฟล์ temp ของพวก office
Read MoreRead More

Posts pagination

ก่อนหน้า 1 … 1,019 1,020 1,021 … 1,192 ถัดไป

Projects

  • Statement Columns Mapping Helper
  • PlusMagi Site Search
  • jQuery Plus Repeater

Recent Posts

  • PHP: การอัปเดต PHP เวอร์ชันใหม่อยู่เสมอเพื่อรับ Patch ความปลอดภัย
  • PHP: การบีบอัด Output ด้วย Gzip/Deflate
  • SecDevOps: เปลี่ยนความปลอดภัยให้เป็นเนื้อเดียวกับ Code และ Operation
  • WordPress: ดูว่า post ทุก ๆ วันเสาร์ใช่มั๋ย
  • เทคนิคตั้งค่า umask 002 ให้กับทุก User บน Mac อัตโนมัติผ่าน Terminal (Batch Script)

Archives

Categories

  • AI (26)
  • Businesses (28)
  • Design (56)
    • UX/UI (22)
  • Histories (16)
  • Life (120)
    • Books (51)
    • Cartoon (6)
    • Movies (11)
    • Sci-Fi (20)
    • Tips and Tricks (26)
    • พุทธ (7)
  • Network (144)
    • Apache HTTP Server (17)
    • IOT (1)
    • Nginx (31)
    • Stalwart (6)
  • Operating Systems (279)
    • Unix-like (204)
      • Android (16)
        • F-Droid (5)
      • Homebrew (21)
      • iPhone (8)
      • Linux (119)
      • macOS (100)
        • OrbStack (11)
      • Oh My ZSH (4)
      • Shell Script (40)
      • SSH (11)
    • Windows (120)
      • PowerShell (25)
      • WSL (25)
  • Programming (807)
    • .NET (19)
      • .NET Core EF (6)
      • C# (17)
    • API (34)
      • REST (6)
      • Swagger (6)
    • Database (189)
      • DBeaver (3)
      • MariaDB (32)
      • MySql (69)
      • Oracle Database (6)
        • 10g (3)
      • PostgreSQL (9)
      • RDBMS (2)
      • SQL Server (85)
        • SSMS (8)
        • T-SQL (26)
      • SQLite (1)
    • PowerBuilder (11)
    • Python (5)
    • Rust (4)
    • System Analyst (SA) (37)
    • Testing (23)
      • Automated Testing (12)
        • Playwright (6)
    • UML (7)
    • Web (435)
      • Backend (291)
        • Golang (1)
        • Java (48)
          • Spring Boot (14)
        • Node.js (2)
        • PHP (242)
          • Laravel (50)
          • Yii (5)
      • Frontend (135)
        • CSS (18)
          • Tailwind CSS (5)
        • JavaScript (122)
          • Angular (3)
          • jQuery (61)
          • Tabulator (19)
          • Vue.js (5)
      • WordPress (26)
  • Programs (97)
    • Excel (12)
  • SecDevOps (95)
    • CI/CD (9)
    • Docker (41)
    • GIT (33)
  • Security (110)
  • Uncategorized (6)
  • กฎหมาย (9)

Sirat WordPress Theme By VWThemes

Scroll Up
Go to mobile version