התעלמות מקבצים (.gitignore)

קובץ .gitignore מציין ל-git אילו קבצים ותיקיות לא צריך לעקוב אחריהם. זה אחד הקבצים החשובים ביותר במאגר.

למה צריך .gitignore?

  • קבצים שנוצרים אוטומטית: node_modules/, dist/, build/
  • קבצים מקומיים: .vscode/, .idea/, .DS_Store
  • קבצי סודות: .env, credentials.json
  • קבצי לוג: *.log, npm-debug.log
  • קבצי הפצה: *.exe, *.apk

ללא .gitignore, היית מוסיף בטעות כל מיני קבצים זמניים, מנפח את המאגר ובמקרים מסוכנים - מסכן סודות.

איך משתמשים?

יוצרים קובץ בשם .gitignore בשורש המאגר (אפשר גם בתיקיות פנימיות). git יקרא אותו אוטומטית.

touch .gitignore
git add .gitignore
git commit -m "Add gitignore"

תחביר

דוגמאות בסיסיות

# הערות מתחילות עם #

# קבצים בודדים
secret.txt
.env

# כל הקבצים בעלי סיומת מסוימת
*.log
*.tmp
*.bak

# תיקיות (השם + /)
node_modules/
dist/
build/

# קבצים בתיקייה ספציפית
src/temp/

# רקורסיבי - בכל מקום במאגר
**/logs/
**/*.cache

שלילה - להחריג מתוך החרגה

*.log         # מתעלם מכל קבצי log
!important.log    # חוץ מ-important.log

תבניות מתקדמות

# כל קבצי .js בתוך build, אבל לא בכל מקום
build/**/*.js

# קבצים שמתחילים בנקודה
.env*

# שלילה ספציפית
!.env.example

דוגמה לפרויקט Node.js / React

# Dependencies
node_modules/
.pnp
.pnp.js

# Production build
dist/
build/

# Environment variables
.env
.env.local
.env.development.local
.env.test.local
.env.production.local

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Editor / OS
.vscode/
.idea/
.DS_Store
Thumbs.db

# Testing
coverage/

# Misc
*.tgz
.cache/

דוגמה לפרויקט React Native / Expo

# Expo
.expo/
dist/
web-build/

# Native
ios/Pods/
android/.gradle/
android/app/build/
*.apk
*.aab

# Dependencies
node_modules/

# Env
.env
google-services.json
GoogleService-Info.plist

איך להתחיל .gitignore לפרויקט חדש?

האתר gitignore.io מייצר עבורכם .gitignore לפי הטכנולוגיות שאתם משתמשים בהן. למשל: Node, VisualStudioCode, macOS.

GitHub גם מציעה תבניות רשמיות לכל שפה.

בעיה נפוצה: קובץ שכבר tracked

אם הוספת קובץ ל-.gitignore אבל הוא כבר נמצא בהיסטוריה, git ימשיך לעקוב אחריו. הסיבה: .gitignore משפיע רק על קבצים untracked.

הפתרון: להסיר את הקובץ מ-staging (לא מהדיסק):

git rm --cached .env
git commit -m "Remove .env from tracking"

עכשיו git יתעלם מ-.env בעתיד, אבל הקובץ עדיין על הדיסק שלכם.

.gitkeep - שמירת תיקייה ריקה

git לא עוקב אחרי תיקיות ריקות. אם אתם רוצים לשמור תיקייה ריקה במאגר, נהוג ליצור בה קובץ ריק בשם .gitkeep:

mkdir uploads
touch uploads/.gitkeep
git add uploads/.gitkeep

זו לא פקודת git רשמית - פשוט מוסכמה.

בדיקה: למה git מתעלם מקובץ?

git check-ignore -v file.log

הפלט יראה לכם איזה כלל ב-.gitignore גורם לזה.

בדקו את עצמכם

נסו לענות לבד לפני שאתם פותחים את התשובה.

  1. מה בדרך כלל נכנס ל-.gitignore בפרויקט Node.js?

    1. src
    2. package.json
    3. README.md
    4. node_modules ו-.env
    הצגת התשובה

    תשובה ד. תלויות שאפשר להתקין מחדש, וסודות.

  2. קובץ כבר במעקב ואז הוספתם אותו ל-.gitignore. מה קורה?

    1. הוא נמחק
    2. Git ממשיך לעקוב עד שמריצים git rm --cached
    3. הוא מוסתר מיד
    4. שגיאה
    הצגת התשובה

    תשובה ב. .gitignore משפיע רק על קבצים שעוד לא במעקב.