איך git עובד

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

1. מחסן הגירסאות

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

גיט עובדת די באותו האופן, רק שבמקום משחק יש לנו קוד.

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

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

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

2. שיתוף פעולה

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

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

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


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

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

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