ตัวทดสอบ Gitignore
วางกฎ .gitignore และรายชื่อไฟล์เพื่อดูว่าไฟล์ใดถูก ignore บ้าง ด้วยกฎและบรรทัดใด และกฎ negation ใดที่ใช้ไม่ได้ผลเพราะ parent directory ถูก ignore ไปแล้ว
🔒 ประมวลผลทั้งหมดในเบราว์เซอร์ของคุณ — ไม่มีการอัปโหลดสิ่งใดที่คุณป้อนที่นี่
ผลลัพธ์
"ทำไม negation ใน .gitignore ของฉันไม่ทำงาน" คือหนึ่งในคำถามเกี่ยวกับ git ที่พบบ่อยที่สุด และคำตอบที่ตรงไปตรงมาก็มักจะเหมือนเดิม: `!pattern` ที่พยายามดึงไฟล์กลับมาในไดเรกทอรีที่ถูกยกเว้นด้วยกฎก่อนหน้าแล้วจะไม่มีวันทำงาน เพราะ git จะไม่เข้าไปในไดเรกทอรีที่ถูก ignore เพื่อตรวจสอบอะไรข้างในอีก เครื่องมือนี้จำลองอัลกอริทึมการจับคู่ .gitignore ของ git จริง — ไม่ใช่แค่ใกล้เคียง — เพื่อให้สามารถตรวจจับและอธิบายสถานการณ์นั้นได้โดยเฉพาะ พร้อมกฎ pattern อื่นๆ ทั้งหมดที่ git รองรับ
วางกฎ .gitignore ของคุณลงในกล่องหนึ่ง และรายชื่อเส้นทางไฟล์ (หนึ่งบรรทัดต่อหนึ่งเส้นทาง เช่น `dist/index.js`, `node_modules/foo/bar.js` หรือ `.env`) ลงในอีกกล่องหนึ่ง เครื่องมือจะประเมินแต่ละเส้นทางตามที่ git จะทำ: ข้ามคอมเมนต์และบรรทัดว่าง, ตัดช่องว่างท้ายยกเว้นกรณี escape, `!` นำหน้าหมายถึงกฎ negation, `/` นำหน้าหมายถึงยึดกับ root แทนที่จะจับคู่ที่ระดับความลึกใดๆ, `/` ลงท้ายจำกัดเฉพาะไดเรกทอรี, และ `*`, `?`, คลาสอักขระ `[abc]` และ `**` (จับคู่ข้ามขอบเขตไดเรกทอรี) ทั้งหมดทำงานตามกฎ glob ที่ระบุไว้
ที่สำคัญ เส้นทางจะถูกตรวจสอบทีละไดเรกทอรีจาก root ลงไป เช่นเดียวกับกลไก ignore ของ git จริง — ไม่ใช่โดยการทดสอบเส้นทางเต็มกับทุกกฎแยกกัน นั่นคือสิ่งที่ทำให้สามารถตรวจจับกรณี negation ที่ตายแล้วได้อย่างถูกต้อง: หาก `dist/` ถูก ignore ในบรรทัดที่ 3 และต่อมามี `!dist/keep.js` พยายามช่วยไฟล์หนึ่งไฟล์ข้างใน เครื่องมือนี้จะรายงานว่า `dist/keep.js` ยังคงถูก ignore อยู่ ระบุกฎบรรทัดที่ 3 ว่าเป็นเหตุผล และแจ้งแยกต่างหากว่า negation นั้นถูกบัง แทนที่จะเงียบๆ เหมือนว่ามันทำงาน
ตารางผลลัพธ์ให้แต่ละเส้นทางที่ทดสอบมีแถวของตัวเอง พร้อมคำตัดสินว่า ignore หรือไม่ชัดเจน, ข้อความกฎและหมายเลขบรรทัดที่แน่นอนซึ่งตัดสินมัน และเมื่อเกี่ยวข้อง — มีหมายเหตุอธิบายเป็นภาษาคนที่ชี้แจง negation ที่ถูกบัง หรือกฎที่สืบทอดจาก parent directory นั่นคือรายละเอียดที่เปลี่ยน .gitignore ที่น่าสับสนให้เป็นสิ่งที่คุณสามารถทำความเข้าใจได้จริงก่อน commit