Git worktrees: איך מריצים שתי sessions של Claude Code במקביל
מאת גלעד דור לוי
סיור בעולם ה-git worktrees, הפיצ'ר שמאפשר להוציא כמה branches לתיקיות נפרדות במקביל, ולמה זה מתברר בדיוק ככלי שסשנים מקבילים של קידוד עם AI צריכים.
סרטון הדרכה קצר עבר על git worktrees השבוע, ופתר בעיה שהטרידה אותי מאז שהתחלתי להריץ יותר מ-session אחד של קידוד עם AI במקביל: מה קורה כששניים מהם צריכים לגעת באותו repository בו-זמנית.
בעיית מעבר ה-branches, לפני שסוכני AI נכנסו לתמונה
זרימת העבודה הרגילה ב-git מוכרת. פותחים תיקיית פרויקט, עושים שינויים, והתיקייה הזו היא ה-working directory. מתחילים feature ויוצרים branch, עורכים, עושים commit, פותחים pull request. מתקנים באג וחוזרים על אותו תהליך ב-branch אחר.
החיכוך מתחיל כשבאג דחוף נוחת באמצע feature שעדיין לא גמור. עושים stash או commit לעבודה הלא גמורה, עוברים ל-main, יוצרים branch לתיקון, מתקנים, ואז חוזרים ל-feature וממשיכים משם. זה עובד כשבן אדם הוא זה שעובר בין המשימות, כי ממילא בן אדם יכול להתמקד רק בדבר אחד בכל רגע נתון.
למה זה מפסיק לעבוד ברגע שסוכן כותב את הקוד
האצלת עבודה ל-Claude משנה את המגבלה. session אחד יכול לעבוד על feature בזמן ש-session אחר מתקן באג, ואף אחד מהם לא צריך לחכות שהשני יסיים. הבעיה היא ש-working directory אחד עדיין מחזיק רק branch אחד checked out בכל רגע נתון, אז אם session אחד באמצע עבודה ומשהו מחליף את ה-branch מתחתיו, הקבצים שלו משתנים בלי אזהרה. גם פתיחת session שני של AI באותה תיקייה לא פותרת כלום, כי שני ה-sessions עדיין קוראים וכותבים בדיוק לאותם קבצים.
מה שבאמת פותר את זה זה לתת לכל branch תיקייה משלו, וזה בדיוק מה ש-git worktrees עושים.
מה זה בעצם worktree
worktree מאפשר להוציא כמה branches מאותו repository בו-זמנית, כל אחד בתיקייה משלו. session אחד עובד בתיקיית ה-feature, session אחר עובד בתיקיית תיקון הבאג, ושינויים באחד לא נוגעים בקבצי העבודה של השני. שתי התיקיות עדיין מצביעות לאותו repository וחולקות את כל היסטוריית ה-git שלו, אז זו לא יצירה של עותקים נפרדים של הפרויקט. זה עדיין branches כרגיל, רק עם מקומות נפרדים לעמוד בהם בפועל בזמן העבודה.
הפקודות הגולמיות מאחורי זה כדאי להכיר גם אם בסוף כלי כלשהו מריץ אותן במקומכם:
git worktree add -b fix/example ../project main
זה יוצר branch חדש בשם fix/example, checked out לתיקייה ב-../project, מתחיל מ-main. git worktree list מציג כל worktree שמחובר ל-repository ואיזה branch checked out בכל אחד. אחרי שהעבודה עברה merge, git worktree remove ../project מנקה את התיקייה, מריצים מהתיקייה המקורית של הפרויקט.
מריצים שני sessions של Claude Code על אותו repository
אפליקציית ה-desktop של Claude Code יכולה לטפל בכל זה בלי לגעת בפקודות האלה ישירות. פתיחת session חדש נותנת checkbox של worktree, וסימון שלו מספיק.
ההדגמה השתמשה בשתי משימות אמיתיות על פרויקט קוד פתוח שהמרצה מתחזק, framework לאפליקציות agentic עם כמה אפליקציות נלוות. המשימה הראשונה הייתה עיצוב מחדש של landing page, בהתאמה ל-layout של עמוד מוצר אחר מאותה משפחה, עם copy שכבר נכתב מראש תוך מחשבה על SEO. המשימה השנייה הייתה החלפת ה-favicon בגרסה מונוכרומטית חדשה של הלוגו.
שני ה-prompts נכנסו לשני sessions נפרדים של worktree, שרצו זה לצד זה. פרט אחד שצץ כמעט מיד, וזה החלק שנשאר לי הכי חזק: תבנית ברירת המחדל של Claude Code לשמות branches היא claude/slug, אבל המרצה רצה feature/slug ו-fix/slug במקום זאת, וצריך היה לכתוב את ההעדפה הזו במפורש בתוך ה-prompt כדי שהיא תישאר. גם ככה, session אחד בחר בהתחלה שם עם prefix של claude/ ונדרש תיקון נוסף לפני שהוא התיישב על feature/slides-landing-redesign.
אף session לא נגע בקבצים של השני בזמן ששניהם רצו. session ה-favicon סיים ראשון, בדק את העבודה של עצמו על ידי הרצת dev server ואישור שהאייקון החדש מוצג, ופתח pull request. ה-diff שלו הכיל רק את קבצי האייקון, כלום מעבודת ה-landing page שהתרחשה באותו זמן ב-worktree השני. מיזוג ה-PR הזה וארכוב ה-session נתנו ל-Claude Code לנקות את ה-worktree אוטומטית, וזה בדיוק סוג הפרט שגורם לי לרצות להעתיק את זרימת העבודה הזו. session ה-landing page המשיך לרוץ אחר כך, אימת את התוצאה שלו בדפדפן הפנימי של האפליקציה לפני שגם הוא היה מוכן ל-pull request משלו.
החלק ששווה לזכור
worktrees הם לא חדשים, והם לא ייחודיים לכלי AI מסוים. Claude Code, Codex ו-Cursor יכולים כולם לעשות בהם שימוש. מה שמשתנה עם סוכני קידוד הוא הסיבה לטרוח: ברגע שיותר ממשימה אחת יכולה לרוץ בלי השגחה במקביל, לתת לכל אחת תיקייה משלה מפסיק להיות נחמד-שיהיה והופך לדבר שמונע משני sessions לדרוס בשקט זה את העבודה של זה.
עקבו אחרינו
טיקטוק · לינקדאין · X · אינסטגרם · טלגרם
מוכנים לאוטומציה?
בואו נבנה יחד מערכת שעובדת בשבילכם — לא להפך.