הגדרת גיט על פרויקט ראשון

1. יצירת פרויקט בתוך סביבת פיתוח

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

אני כאן אשתמש בסביבת פיתוח שנקראת PyCharm שהיא סביבה לפיתוח בשפת Python. מפתחים בשפות אחרות יכולים להשתמש בסביבות דומות של אותה חברה כדי לקבל ממשק שנראה כמעט אותו דבר (החברה נקראת Jetbrains ויש להם גם את IntelliJ ל Java ואת Webstorm לעולם ה Web). סביבות פיתוח אחרות תומכות ברצפי עבודה מאוד דומים אז גם אם אתם רגילים ל IDE אחר אני בטוח שתמצאו את הכפתורים.

נתחיל בהתקנת Python מהקישור:

https://www.python.org/downloads/windows/

נמשיך בהתקנת PyCharm מהקישור:

https://www.jetbrains.com/pycharm/download/

וכעת ניצור פרויקט חדש ונוסיף אליו מספר קבצים, לדוגמא נכתוב את הקובץ main.py עם התוכן הבא:

print("Hello World")

בנוסף אליו PyCharm יוצרת ומוסיפה אוטומטית תיקיה בשם venv. נשאיר אותה כאן לבינתיים.

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

2. הוספת גיט לפרויקט משורת הפקודה

נפתח מסוף לשורת הפקודה ונכנס לתיקיית הפרויקט. בתוך התיקיה נכתוב:

$ git init

הפקודה יוצרת תיקיה חדשה בשם .git בתוך תיקיית הפרויקט שלכם. גיט יענה לנו בפלט:

Initialized empty Git repository in C:/Users/IEUser/PycharmProjects/helloworld/.git/

מכלי שורת הפקודה כתבו את הפקודה:

$ ls -a

ותוכלו לראות את כל הקבצים והתיקיות בתיקיה הנוכחית ושם התווספה התיקיה החדשה .git. כך זה נראה אצלי:

$ ls -a
./  ../  .git/  .idea/  main.py  venv/

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

3. הקומיט הראשון שלי

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

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

$ git add .

הפקודה git add גם מדפיסה מספר הודעות שגיאה על המסך:

warning: LF will be replaced by CRLF in venv/Lib/tcl8.6/init.tcl.
The file will have its original line endings in your working directory.

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

בינתיים אפשר להתעלם מהאזהרה ולהמשיך לפקודה הבאה:

$ git commit -m 'initial commit'

שימו לב לטקסט initial commit: טקסט זה מתאר את הגירסא וילווה אותה בתוך מאגר ההיסטוריה לנצח נצחים (או לפחות עד שתמחקו את מאגר ההיסטוריה).

גם כאן גיט עונה לנו באזהרה והפעם אזהרה שאי אפשר להתעלם ממנה:

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'IEUser@IE11WIN8_1.(none)')

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

$ git config --global user.email "ynon@tocode.co.il"
$ git config --global user.name "ynon"

וכעת הפעילו שוב את פקודה השמירה:

$ git commit -m 'initial commit'

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

4. הקומיט השני שלי

נחזור ל PyCharm כדי לגלות ש PyCharm מספיק חכם לזהות שהוספנו את גיט לפרויקט. הוא שואל אותנו אם להוסיף באופן אוטומטי קבצים מסוימים לגיט. אנחנו נגיד שלא וגם נסמן את התיבה Remember, don't check again. אני מעדיף להוסיף את כל הקבצים בצורה ידנית.

בחזרה לקובץ main.py ובואו נעדכן אותו ונוסיף שם פונקציה כך שתוכן הקובץ נראה כך:

def hello_text():
    return "Hello World"

print(hello_text())

עכשיו קרה דבר מעניין: כבר בתוך PyCharm אנחנו רואים ששם הקובץ main.py שינה את הצבע לתכלת כדי לסמן לנו שהקובץ עודכן מאז הגירסא האחרונה ששמורה בגיט.

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

$ git add .
$ git commit -m 'ADD: move hello text to its own function'

עכשיו הצבע ב PyCharm חזר ללבן וכך אנחנו יודעים שכל הנתונים נשמרו בצד. לחצו כפתור ימני על הפרויקט ובחרו Git ואז Show History. בתחתית המסך ייפתח חלון שמראה את שני הקומיטים ששמרנו בצד עם הטקסט שכתבנו ליד כל קומיט. עכשיו אתם יכולים ללחוץ על הקומיט ולבחור Compare With Local ואז ייפתח לכם חלון שמראה את כל הקבצים שהשתנו בין הגירסא שבחרתם לגירסא שעכשיו יש לכם בתיקיה. לחיצה כפולה על אחד הקבצים תראה ממש את ההבדלים.

בשיעורים הבאים נראה איך לראות את כל המידע הזה גם לא מתוך הכלי PyCharm כך שתוכלו להגיע אליו לא משנה באיזה IDE אתם עובדים.

5. קומיט שלישי ואחרון

כמעט כל סביבות הפיתוח היום תומכות בגיט תמיכה מלאה וכמובן גם PyCharm. היכולת לראות את ההיסטוריה היא מאוד נחמדה אבל אם אנחנו כבר עובדים בתוך IDE מסוים כנראה שלא נרצה לעזוב אותו רק בשביל לבצע commit. עדכנו את הקובץ main.py פעם שלישית והפעם לחצו כפתור ימני על שם הקובץ, בחרו git ואז commit file. בתוך PyCharm יהיה לכם מקום לכתוב את ההודעה שתלווה את הקומיט ועוד מספר אופציות עליהן נדבר בהמשך.

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


הפקודות שראינו בפרק:

1. יצירת פרויקט git בתיקיה הנוכחית

$ git init

2. הוספת כל הקבצים והתיקיות לפרויקט ויצירת קומיט ראשון מכל הקבצים שבתיקיה

$ git add .
$ git commit

3. הוספת קובץ מסוים ל Staging Area וביצוע קומיט

$ git add demo.py
$ git commit -m 'initial commit'