# מערך שיעור: Git ו-GitHub<no value>

**משך:** יום לימוד מלא — 6 שעות אקדמיות (270 דקות).

**מטרת השיעור:** הסטודנטים יבינו את המודל של Git (שלושה אזורים ו-Commit כתמונת מצב), יעבדו במחזור add → commit → push בביטחון, ויסיימו את היום עם פרויקט Python אמיתי ב-GitHub.

**בסוף השיעור הסטודנטים צריכים:**

1. להסביר את שלושת האזורים ואת ההבדל בין add, commit ו-push.
2. לנהל Repository מקומי: init, status, add, commit, log, diff ו-`.gitignore`.
3. לחבר Repository ל-GitHub, לדחוף אליו, ולכתוב הודעות Commit טובות.

**דגש קריטי:** **`git status` לפני כל פעולה**, ו**Commit ≠ Push**. מרבית התקלות של מתחילים נובעות משתי הנקודות האלה.

**לא בסקופ (לפי הסילבוס):** Branches, Merge, Pull Requests ו-Conflicts. אם נשאלים, לומר שזה יגיע בהמשך המסלול.

---

## מהלך השיעור

| חלק בשיעור | משך | הערות ודגשים |
|---|---|---|
| פתיחה: תיקיית `project_final_v3_REALLY_FINAL` | 10 דק' | להציג תיקייה כזו על המסך. כולם מזדהים. |
| מושגים: VC, Repository, Commit, שלושה אזורים | 35 דק' | ציור שלושת האזורים על הלוח, והוא נשאר כל היום. אנלוגיית התמונה הקבוצתית. |
| הגדרת git config + init | 15 דק' | לוודא שכולם הגדירו שם ומייל. לבדוק עם `--list`. |
| הפסקה | 15 דק' | |
| פקודות בסיס: status, add, commit, log, diff | 50 דק' | פרויקט `calculator`. אחרי כל פקודה: `git status`, ולהצביע על הציור על הלוח. |
| `.gitignore` | 15 דק' | `__pycache__` מופיע, ואז נעלם. הדגמת סכנת `add .` עם קובץ "סיסמה". |
| הפסקה | 15 דק' | |
| GitHub: חשבון, Repository, remote, push | 45 דק' | **לפתוח חשבונות מראש** אם אפשר. לטפל בבעיות אימות אחת-אחת. |
| הודעות Commit + משימת הסיכום | 60 דק' | כל סטודנט מעלה את פרויקט הספרייה עם 5 Commits. המרצה עובר ובודק את ההיסטוריה באתר. |
| בדוק את עצמך | 10 דק' | |

---

## דגשים להעברת השיעור

- **Git הוא מודל מנטלי, לא רשימת פקודות.** כל פקודה מוצגת כ"תזוזה" בין האזורים על הלוח.
- **הכנה מוקדמת:** לבקש מהסטודנטים לפתוח חשבון GitHub לפני השיעור. ביום עצמו, יצירת חשבונות (ואימות מייל) גוזלת זמן רב.
- **אימות:** רוב התקלות יהיו כאן. Git Credential Manager פותח דפדפן ב-Windows וב-Mac. לוודא שזה עובד אצל כולם לפני המשימה. כגיבוי, להכין הסבר קצר על Personal Access Token.
- **Vim:** מישהו ייתקע בו. לכתוב על הלוח `Esc` ואז `:q!`, ולהזכיר להשתמש ב-`-m`.
- **סודות:** לספר סיפור אמיתי על מפתח AWS שדלף ל-GitHub ונוצל תוך דקות. זה נחרט.
- **הודעות Commit:** לעשות "Code Review" חי להיסטוריה של 2–3 סטודנטים (בהסכמתם) על המסך.
- **הרגל לשאר הקורס:** מהיום כל תרגיל ב-Repository. בנושא OOP, הפרויקט ינוהל ב-Git מהשורה הראשונה.

---

## מושגים

| מושג | הסבר קצר |
|---|---|
| Version Control | מערכת שמתעדת את היסטוריית השינויים בקבצים. |
| Git | מערכת VC מבוזרת שרצה מקומית. |
| Repository | פרויקט + תיקיית `.git` עם ההיסטוריה. |
| Working Directory | הקבצים כמו שהם עכשיו בדיסק. |
| Staging Area / Index | השינויים שנבחרו ל-Commit הבא. |
| Commit / Hash | תמונת מצב עם הודעה / מזהה ייחודי. |
| HEAD | ה-Commit הנוכחי (האחרון בענף). |
| Untracked / Modified / Staged | קובץ חדש / שונה / מוכן ל-Commit. |
| `.gitignore` | תבניות של קבצים ש-Git מתעלם מהם. |
| GitHub | שירות לאחסון Repositories בענן. |
| Remote / origin | עותק מרוחק / הכינוי המקובל לראשי. |
| push / clone / pull | שליחה ל-Remote / הורדת Repository / הורדת שינויים. |
| README.md | תיאור הפרויקט, שמוצג בעמוד הראשי ב-GitHub. |

---

## תרגיל חשיבה

**שאלת פתיחה (לפני Staging):** "שיניתי היום שלושה דברים בפרויקט: תיקנתי באג במחשבון, שיפרתי את ה-README, וגם הוספתי קובץ עם הערות אישיות. מחר מגלים שהתיקון שלי שבר משהו אחר. מה הייתי רוצה שתהיה האפשרות שלי?"

**מהלך:**

1. לאסוף רעיונות: "לבטל את התיקון בלבד", "לראות מה בדיוק שיניתי".
2. לשאול: "אם כל שלושת השינויים נשמרו כ'שמירה' אחת, אפשר לבטל רק את התיקון?" לא. לכן כל שינוי לוגי צריך להיות Commit נפרד.
3. לשאול: "אז איך בוחרים מה נכנס לכל שמירה?" זה בדיוק תפקיד ה-Staging Area.
4. "ומה עם קובץ ההערות האישיות?" לא נכנס בכלל, ומכאן ל-`.gitignore`.

**מה המרצה מראה בסוף:** שלושה Commits נפרדים ב-`git log --oneline`, ואז את `git show <hash>` של Commit התיקון (מציג בדיוק מה השתנה בו). משפט סיום: "Commit טוב הוא שינוי אחד שאפשר להבין, לבדוק ולבטל לבד — ההיסטוריה היא תיעוד ההחלטות שלכם."
