כל repository של Git צריך קובץ .gitignore. זו רשימת טקסט פשוטה של נתיבים ש-Git *לא* צריך לעקוב אחריהם: תוצרי build, תיקיות תלויות, הגדרות IDE וזבל של מערכת ההפעלה כמו .DS_Store. בלעדיו, ה-commit הראשון שלכם גורר בטעות את node_modules/, .env ו-target/, ולנקות את הבלגן הזה מעצבן הרבה יותר מלכתוב את הקובץ נכון מההתחלה.
כל אקוסיסטם מתעלם מדברים אחרים, ורוב הפרויקטים משלבים כמה בבת אחת. אפליקציית Node + TypeScript טיפוסית על מחשב macOS עם VS Code כבר צריכה את האיחוד של ארבע רשימות התעלמות שונות. כתיבה ידנית מהזיכרון אומרת שתשכחו את coverage/, תדליפו .env או תעשו commit ל-.idea/ מיותרת מההגדרות של JetBrains של חבר צוות.
לכן המחולל הזה מאגד תבניות נבחרות מהפרויקט הקנוני github/gitignore, אותם כללים שעומדים מאחורי ההצעות האוטומטיות הרשמיות של GitHub, ומאפשר לשלב ביניהן. סמנו את התיבות הרלוונטיות, ותקבלו קובץ .gitignore אחד בלי כפילויות להדבקה ישירה ב-repo. בלי חשבון, בלי העלאות, הכול רץ בדפדפן.
מה תלמדו תוך כדי בניית ה-.gitignore
תבניות ב-.gitignore משתמשות בתחביר glob: *.log מתעלם מכל קובץ לוג, build/ מתעלם מתיקייה, ו-!important.log מבטל את ההתעלמות מקובץ מסוים גם אם glob תואם לו.
התבניות חלות ביחס למיקום של קובץ ה-.gitignore, כך ש-.gitignore בתוך src/ משפיע רק על קבצים תחת src/.
קבצים שכבר במעקב **לא** מוחרגים רטרואקטיבית. אם עשיתם commit ל-node_modules/ ואז הוספתם אותה ל-.gitignore, עדיין צריך להריץ git rm -r --cached node_modules כדי להוציא אותה מהמעקב.
כמה קובצי .gitignore יכולים להתקיים יחד: בשורש ה-repo, בתיקיות משנה, וגם ~/.gitignore_global גלובלי לכלים אישיים כמו JetBrains או מערכת ההפעלה שלכם.
הסדר חשוב בשלילות: !pattern מאוחר יותר עובד רק אם כלל מוקדם יותר באמת התעלם מהקובץ. שלילה של תיקייה לא יכולה לבטל התעלמות מקובץ שבתוכה.
איך ליצור .gitignore, צעד אחר צעד
1
בחרו ערכה מוכנה (לא חובה)
אם הפרויקט שלכם תואם לשילוב נפוץ, כמו Next.js, Django או Rails, לחצו על ערכה מוכנה כדי לסמן את כל התיבות הרלוונטיות בבת אחת. אחר כך הסירו או הוסיפו עוד כמה אם יש לכם תוספות.
2
הוסיפו את השפות שלכם
לכל שפה יש תוצרים שצריך להתעלם מהם: ל-Node יש node_modules/, ל-Python יש __pycache__/ וסביבות וירטואליות, ול-Java יש target/ וקובצי .class. בחרו את השפות שהפרויקט שלכם באמת מקמפל.
3
הוסיפו את הפריימוורקים שלכם
מעבר לכללי השפה, פריימוורקים מוסיפים תיקיות build משלהם: Next.js רוצה .next/ ו-.vercel, Django רוצה staticfiles/ ו-db.sqlite3, ו-Rails רוצה tmp/ ו-/storage/*. סמנו את הפריימוורק אם אתם משתמשים בו.
4
הוסיפו עורכים ומערכות הפעלה
הוסיפו את תבניות העורכים שה**צוות** משתמש בהם (לא רק אתם): אם מישהו משתמש ב-JetBrains או ב-Vim, כללו אותם. אחר כך הוסיפו את מערכות ההפעלה בצוות: macOS מייצרת .DS_Store, Windows מייצרת Thumbs.db, ושני הקבצים קל להכניס ל-commit בטעות.
5
העתיקו או הורידו
החלונית הימנית מציגה את הפלט המשולב בלי כפילויות. לחצו על **העתקה** כדי להדביק אותו ישירות ב-.gitignore בשורש ה-repo, או על **הורדה** כדי לשמור את הקובץ ישירות.
המינימום ההכרחי לכל פרויקט Node שמשותף עם חבר צוות על macOS. גם פרויקט צדדי קטנטן צריך את הכללים האלה: בלי .DS_Store ו-node_modules/ תילחמו בקונפליקטים מיותרים.
Backend טיפוסי של Django שמפותח ב-PyCharm. שימו לב שמתעלמים מ-db.sqlite3 המקומי: פרודקשן אף פעם לא משתמש בו, ו-commit שלו מדליף נתוני פיתוח ושובר clone חדש אצל חברי הצוות.
עקיפת כלל עם שלילה
התעלמות מכל הלוגים חוץ מאחד
*.log
!keep-me.log
השורה הראשונה מתעלמת מכל קובץ .log. הכלל !keep-me.log מחזיר אחר כך את הקובץ הספציפי הזה. שלילות עובדות רק על קבצים שכלל קודם באמת התעלם מהם: אי אפשר לבטל התעלמות מקובץ בתוך תיקייה שמתעלמים ממנה.
טעויות .gitignore נפוצות
הוספת .gitignore בדיעבד וציפייה שקבצים שכבר עשיתם להם commit ייעלמו. הם לא ייעלמו: צריך להריץ git rm -r --cached <path> כדי להוציא אותם מהמעקב.
commit של .env אפילו פעם אחת. גם commit יחיד מדליף את הסוד לנצח בהיסטוריה של ה-repo. הוסיפו .env* ל-.gitignore **לפני** ה-commit הראשון, והחליפו כל סוד שכבר חמק פנימה.
שכחה של רעש ספציפי למערכת ההפעלה ב-repo משותף. אם אפילו חבר צוות אחד עובד על macOS ואין ב-repo כלל ל-.DS_Store, הקבצים האלה יופיעו בכל diff של PR ויאטו את הסקירה.
ניסיון לבטל התעלמות מקובץ בתוך תיקייה שמתעלמים ממנה. ברגע שמתעלמים מ-build/, שום שלילה לא יכולה להחזיר את build/keep.txt, כי Git אפילו לא מסתכל בתוך התיקייה. שנו את המבנה או הוציאו את הקובץ החוצה.
ערבוב הגדרות עורך ב-.gitignore של הפרויקט עבור כלים שרק אתם משתמשים בהם. רק אתם על JetBrains בצוות שעובד עם VS Code? שימו את .idea/ ב-~/.gitignore_global ה**גלובלי** שלכם במקום.
שאלות נפוצות על Gitignore Generator
מאיפה מגיעות תבניות ה-.gitignore האלה?
התבניות מתומצתות מפרויקט הקוד הפתוח github/gitignore, אותו מקור ש-GitHub משתמשת בו כשמסמנים "add .gitignore" ביצירת repo חדש. קיצצנו כל אחת לכללים שצוותים באמת צריכים וקיבצנו אותן לפי קטגוריה.
האם עושים commit לקובץ ה-.gitignore עצמו?
כן. .gitignore נועד להיות בניהול גרסאות ומשותף עם הצוות. הוא ה*חוזה* לגבי מה צריך ומה לא צריך להיות במעקב. היוצא מן הכלל הוא העדפות אישיות (למשל העורך שאתם אוהבים), שמקומן ב-~/.gitignore_global הגלובלי שלכם.
איך מוציאים ממעקב קובץ שכבר עשיתם לו commit?
הוסיפו אותו קודם ל-.gitignore, ואז הריצו git rm --cached <path> (או git rm -r --cached <folder>) כדי להסיר אותו מהאינדקס בלי למחוק אותו מהדיסק. עשו commit לשני השינויים יחד כדי שחברי הצוות יראו את העדכון.
אפשר שיהיו כמה קובצי .gitignore ב-repo אחד?
כן. Git מחפש .gitignore בכל תיקייה ומחיל את הכללים על תת-העץ הזה. זה שימושי ב-monorepo שבו ל-frontend ול-backend יש כללי התעלמות שונים מאוד: השאירו בשורש כללים לרעש משותף של מערכת הפעלה ועורך, ושימו כללי שפה בתיקייה של כל חבילה.
מה ההבדל בין .gitignore ל-.git/info/exclude?
.gitignore נכנס ל-commit ומשותף עם הצוות. .git/info/exclude קיים רק ב-clone המקומי שלכם ומיועד להחרגות אישיות שאתם לא רוצים לדחוף. להחרגות בכל ה-repositories שלכם, השתמשו ב-~/.gitignore_global גלובלי במקום.