עבודה עם שינויים

הסרת קבצים שאינם במעקב

עץ עבודה אוסף קבצים ש־git מעולם לא לקח מהם עותק: פתק זמני, debug-output.txt, תיקיית dist/ מבנייה שנכשלה, node_modules מענף שנטשתם בחודש שעבר. ל־git יש פקודה אחת לזה — git clean — והיא פעולת ה־git היחידה שאין שום דבר מאחוריה. התוכן מעולם לא היה בקומיט, ולכן אין רשומת reflog, אין סטאש, אין ביטול, ואין שום לחש git שמחזיר אותו.

זו הסיבה שזו הפעולה שאנשים מריצים בטרמינל ואז מתחרטים. הגרסה של Gitcito מציגה את כל הרשימה לפני שקורה משהו.

⌘K ← הסרת קבצים שאינם במעקב.

נתיבים שאינם במעקב ונתיבים מוחרגים מוצגים בנפרד, כל אחד עם גודלו, לפני שמשהו מוסר

מה הרשימה אומרת

כל רשומה היא נתיב ש־git clean יכול להגיע אליו, עם גודלו בדיסק, בשתי קבוצות:

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

הפיצול הוא כל הפואנטה. נתיבים מוחרגים הם בדרך כלל חסרי ערך, ומדי פעם הם העותק היחיד של משהו שחשוב: .env מקומי, דאמפ של מסד נתונים, פיקסצ׳ר שהורדתם. שום דבר שתואם ל־.gitignore לא נבחר בשבילכם.

תיקייה שכולה מחוץ למעקב היא שורה אחת, ולא שורה לכל קובץ — tmp/, dist/, node_modules/ — כי זו רמת הפירוט שבה git מסיר אותן, ורשימה של 40,000 קבצים היא רשימה שאף אחד לא קורא. גודלה הוא סכום מה שהיא מחזיקה.

תיקייה המסומנת כמאגר משל עצמו מחזיקה .git משלה: שכפול שהפלתם לתוך זה, או ניסוי שמעולם לא חיברתם. git מסרב להסיר כאלה (הוא דורש -ff, דגל ש־Gitcito אינו מציע) — האשפה לוקחת אותן.

אשפה או מחיקה

העברה לאשפה מופעלת כברירת מחדל, ואינה עוברת דרך git בכלל: הנתיבים הולכים לאשפה של המערכת שלכם, ומשם אפשר להחזיר אותם. זה המסלול היחיד שמסיר מאגר מקונן, והיחיד ששורד תיבת סימון שגויה.

כיבוי שלה הוא git clean -f -d -x אמיתי על בדיוק הנתיבים שנבחרו, והוא מבקש אישור כשהמונה והגודל הכולל מולכם. שום דבר לא מתאושש מזה.

מגבלות ששווה להכיר

  • רק קבצים שאינם במעקב. קובץ במעקב ששונה אינו כאן — זו זריקה, שמשחזרת אותו מהאינדקס או מ־HEAD.
  • הרשימה חסומה ב־400 הנתיבים הראשונים. אם במאגר יש יותר, הסירו את מה שרשום ולחצו סריקה מחדש לשאר.
  • גדלי תיקיות הם קירוב בעצים גדולים מאוד: הסריקה נעצרת אחרי 20,000 קבצים, ולכן node_modules ענקית עלולה להיקרא קטנה ממה שהיא. היא לעולם לא נקראת גדולה יותר.
  • הסריקה היא תמונת רגע. אם בנייה כותבת קבצים בזמן שהחלון פתוח, לחצו סריקה מחדש לפני שאתם מסירים משהו.
  • הנתיבים נבדקים מול הרשימה של git עצמו של קבצים ניתנים להסרה לפני שנוגעים במשהו, ולכן שום דבר שנמצא במעקב לא יכול להיות מוסר דרך החלון הזה, גם לא לפי שם.

ראו גם: העלאה לסטייג׳ וזריקה · החרגת קבצים · הסרת קובץ מההיסטוריה

שיפור התרגום הזה ב־GitHub