מדריך גרוק CLI בעברית

תיעוד 51

הפקודה grok clone

הפקודה grok clone מושכת מאגר Git לתוך מאגר תוכן של Grove ומעגנת עץ עבודה מוטל (projected working tree, כלומר NFS ב-macOS, ו-FUSE ב-Linux). כל הפעלה קוראת את [clone] enabled בהגדרות Grove (~/.config/grove/config.toml) ואת GROK_CLONE / GROVE_CLONE בתהליך זה. הדמון של Grove אינו מאשר תקשורת Clone IPC.

פעולה זו אינה מפעילה את Grove עבור עצי עבודה (worktrees) של הפעלה / -w. אלה משתמשים בשער נפרד (GROK_WORKTREE_TYPE ו-[cli] grove_worktree ב-~/.grok/config.toml, ראה מדריך הגדרות). המשתנים GROK_WORKTREE_TYPE ו-[cli] grove_worktree אינם מפעילים את grok clone.

grok clone <url> [dir] [--branch NAME] [--cone PATH]... [--full-history]

#היסטוריה

ברירת המחדל היא אתחול בעומק 1 של הענף שנבחר (blob:none + --depth=1). רק ענף זה מפורסם כהפניה למעקב מרוחק (remote-tracking ref).

השתמש ב---full-history כאשר אתה זקוק להיסטוריית קומיטים מלאה, תגיות, או כל ענף מרוחק בעת השיבוט (ברירת המחדל הקודמת).

לאחר שיבוט בעומק 1, פקודות אלה מעמיקות רק את הענף שנבחר:

git fetch --deepen=N origin
git fetch --unshallow origin

משיכת ענף אחר דורשת מפרט הפניה (refspec) מפורש המוגבל בעומק. פקודת git fetch origin או git fetch origin other רגילה לא תמשוך את ההיסטוריה המלאה של אותו ענף דרך מפרט ההפניה שמוגדר כברירת מחדל:

git fetch --depth=1 origin refs/heads/NAME:refs/remotes/origin/NAME

שיבוט רדוד כברירת מחדל דורש דמון Grove שמבין את ה-RPC מסוג clone_shallow. אם הלקוח מסרב, הפעל מחדש או עדכן את הדמון (או העבר את --full-history):

grove daemon --foreground

ב-macOS ניתן גם להתקין סוכן KeepAlive:

grove doctor --install-agent

#אימות

פרטי אימות של Git עבור שיבוט שייכים ל-דמון של Grove, ולא ל-grok login. מדובר בשני עולמות נפרדים:

עולםמכסהפקודותאחסון
Grokהמודל וה-APIgrok login, grok logout~/.grok/auth.json
Grove Gitהשרת המרוחק שממנו שיבוט זה מושךgrove status, grove reload-credentialsתא פרטי האימות של הדמון, שנבנה מתוך auth_mode בהגדרות Grove (מסייע git credential, קובץ אסימון carrier, או GROVE_AUTH_TOKEN)

הפקודה grok clone לעולם אינה קוראת את ~/.grok/auth.json עבור Git. התחברות ל-Grok אינה מעניקה לדמון פרטי אימות עבור השרת המרוחק, וכך גם לא [clone] enabled = true: דגל זה הוא שער מוצר הקובע האם grok clone ירוץ בכלל, ולא הרשאה עבור GitHub.

כאשר Grove מסווג כשל כבעיית פרטי אימות, השיבוט מדפיס את הסיווג ואת הפקודות שאחראיות עליו, ללא כתובת ה-URL המרוחקת:

Grove Git credentials rejected (unavailable).
Grove Git credentials belong to the Grove daemon, not `grok login`.
Check `grove status` then `grove reload-credentials`.
סיווגמשמעותהשלב הבא
unavailableלדמון לא היו פרטי אימות שמישים, או שהשרת המרוחק דחה אותםהפקודה grove status מציינת את הספק הפעיל, תקן את המקור הזה, ולאחר מכן grove reload-credentials
expired-staticתוקף האסימון פג והתקנה זו אינה מרעננת אסימוניםהתחל הפעלה חדשה, או הפעל את GROVE_TOKEN_ROTATION=expected
carrier-staleהדמון המתין לשכתוב carrier ועדיין מחזיק באסימון שנדחההמתן לשכתוב, או grove reload-credentials
otherספק פרטי האימות נכשל מסיבה אחרתהרץ grove status, ולאחר מכן grove reload-credentials

רק expired-static ו-carrier-stale מוסיפים שורה משלהם להודעה. העצה עבור unavailable תלויה בספק שהדמון מחזיק בו, ותהליך השיבוט לעולם אינו קורא זאת, לכן היא נשארת על grove status ו-grove doctor.

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

הפקודה grove status מדפיסה בלוק אימות ברמת הדמון גם ללא נקודות עיגון:

  auth: mode=auto live=git-delegate health=ok last=- reload=supported
        hint=credentials look healthy

הערך mode הוא ה-auth_mode שהוגדר, live הוא הספק שהדמון מחזיק בפועל. הערכים mode ו-live עשויים לא להתאים: זהו המצב שפקודת grove reload-credentials נועדה לתקן. לדוגמה, עם auth_mode = auto, דמון שהופעל לפני שקובץ אסימון נכתב יישאר על git-delegate עד לבנייה מחדש של התא.

grove reload-credentials
# grove: credentials reloaded → token-file

טעינה מחדש (reload) בונה מחדש את התא ממשתני הסביבה ומהדיסק ומדפיסה את הספק שאליו הגיעה, ללא הדפסת סודות. היא אינה יכולה ליצור התחברות: עם auto או git וללא אסימון carrier, הגדר תחילה את git credential או את gh auth, ולאחר מכן טען מחדש.

הפקודה grove doctor מדווחת על אותם שדות כממצא יחיד: auth.ok, auth.degraded, auth.unavailable, auth.daemon-down, או auth.old-daemon.

#דמון

הפקודה grok clone משתמשת בדמון Grove פעיל. אם שקע הבקרה (control socket) אינו פועל, היא מפעילה את grove daemon --foreground כתהליך מנותק (כך שיציאה או Ctrl-C ב-grok לא יפילו את הדמון או את נקודות העיגון שלו) וממתינה לשקע.

הקובץ הבינארי grove מאותר מתוך PATH, ולאחר מכן מתוך הספרייה של קובץ ההפעלה grok (לדוגמה ~/.grok/bin/grove לצד grok). אין מיקום התקנה נפרד. ב-macOS אין חבילת PATH עבור grove, בנה אותו מתוך המאגר המאוחד (monorepo):

cargo build -p grove --release

ב-Linux, שיבוט זקוק ל-FUSE שמיש לפני שהוא מפעיל דמון: הקובץ /dev/fuse חייב להתקיים, ובנוסף המשתמש הנוכחי יכול לפתוח אותו או שמסייע fusermount3 / fusermount עם הרשאת setuid נמצא ב-PATH (Grove מעגן דרך כל אחד משני הנתיבים). היעדר FUSE הוא שגיאה קריטית (hard error) עם פקודות התקנה, ולא תקיעה. כאשר דמון כבר פועל הבדיקה מדולגת, מכיוון שדמון זה עשוי להחזיק בהרשאות שלתהליך זה אין.

מערכת ההפעלה Windows אינה נתמכת (אין תשתית ProjFS). השתמש ב-git clone, או הרץ את grok clone ב-macOS או ב-Linux.