גיט

מערכת ניהול גירסאות

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

Git
Git-logo.svg
Git session.svg
מפתח ג'וניו המאנו, לינוס טורבאלדס
תאריך השקה 7 באפריל 2005 עריכת הנתון בוויקינתונים
גרסה אחרונה 2.19.1‏ (16 באוגוסט 2019)
מערכת הפעלה חוצה-פלטפורמות
נכתבה בשפות C, Bourne Shell, Tcl, Perl
סוג רישיון הרישיון הציבורי הכללי של גנו
קטגוריה ניהול גרסאות
git-scm.com
לעריכה בוויקינתונים שמשמש מקור לחלק מהמידע בתבנית OOjs UI icon info big.svg

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

גיט נוצר על ידי לינוס טורבאלדס בתאריך 7 באפריל 2005 ונכון לשנת 2020 היא נחשבת מערכת ניהול הגרסאות הפופולרית ביותר[1].

היסטוריהעריכה

החל משנת 2002, הפיתוח של פרויקט לינוקס השתמש במערכת ניהול הגרסאות המבוזרת הקניינית BitKeeper (אנ'). בשנת 2005 הצליח אנדרו טריגל לפתח לקוח עצמאי. בשל כך נשלל רישיון השימוש לפרויקט לינוקס. טורבאלדס לא היה מרוצה ממערכות ניהול הגרסאות האחרות שהיו קיימות באותו שלב[2], והחליט לכתוב אחת משלו. הוא החל לעבוד על גיט ב-3 באפריל 2005. פחות מחודש לאחר מכן כבר הייתה גרסה שאפשרה פיתוח יעיל של לינוקס (מערכת מרקוריאל נכתבה באותו הזמן ומאותן הסיבות). ביולי אותה שנה, הפך ג'וניו המאנו למתחזק הראשי.

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

ברחבי העולם, מספר עצום של חברות הזנק, קולקטיבים וחברות בין-לאומיות, כולל גוגל ומיקרוסופט, משתמשים בגיט כדי לשמור על קוד המקור של פרויקטי התוכנה שלהם. חלקם מארחים פרויקטי גיט משלהם, אחרים משתמשים בגיט באמצעות חברות אירוח מסחריות כמו GitHub (נוסדה בשנת 2007), Bitbucket (אנ') (נוסדה בשנת 2010) ו-GitLab (אנ') (נוסדה בשנת 2011). הגדולה שבהן, GitHub, מונה 40 מיליון מפתחים רשומים ונרכשה על ידי מיקרוסופט בתמורה עצומה של 7.5 מיליארד דולר בשנת 2018.

האינדיקציה הטובה ביותר לדומיננטיות השוק של גיט היא סקר מפתחים שנערך על ידי Stack Overflow. סקר זה מצא כי 88.4% מכלל 74,298 הנשאלים בשנת 2018 השתמשו בגיט (עלייה מ -69.3% בשנת 2015). המתחרים הקרובים ביותר היו Subversion, עם כניסה של 16.6% (ירידה מ -36.9%); Team Foundation Version Control עם 11.3% (ירידה מ -12.2%); ו-Mercurial, עם 3.7% (ירידה מ -7.9%). למעשה, גיט הפכה להיות כה דומיננטית עד כדי כך שמדעני הנתונים ב-Stack Overflow לא טרחו לשאול את השאלה בסקר שלהם ב-2019[דרוש מקור].

מבנהעריכה

גיט היא מערכת ניהול גרסאות מבוזרת - כל עותק מקומי של המאגר מכיל את כל המידע (כל ההיסטוריה). המידע הזה נשמר בדרך כלל בתת-תיקיה בשם ".git". גיט שומרת אובייקטים מסוג מידע (blob, בדרך כלל קובץ), עץ (tree, מבנה ספריות) וגרסה (commit). האובייקטים מזוהים על ידי שם שהוא גיבוב תוכנם לפי SHA-1.

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

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

גרסה (revision או commit)
כל שינוי שנשמר הוא צומת בגרף, המכונה גרסה. בדרך כלל מדובר על שינוי ביחס לגרסה קודמת, אולם השינוי יכול להיות גם מיזוג (merge) של שתי גרסאות קודמות משני ענפי פיתוח שונים. שם הגרסה הוא פלט של SHA-1, שהוא למעשה מספר הקסדצימלי באורך 40 "ספרות" הקסדצימליות (לדוגמה: b70df95dbae39b3f0447be5c214d1dee33245827). אפשר להשתמש ברוב המקרים במספר יותר קטן של תווים מתחילת המספר (לדוגמה: b70df95) כשם מקוצר לאותה גרסה.
ענף (branch)
הוא תת גרף בגרף הגרסאות. כל גרסה, כלומר כל צומת, מוצגת כאן בשמה המקוצר. גיט מחזיק רשימה של ענפים מקומיים והם בדרך כלל הקצוות הנוכחיים של השינויים. מקובל לקרוא לענף הראשי master. כמו כן HEAD הוא שם שמור לצומת שבה אנחנו נמצאים כרגע (בדרך כלל: בענף הפיתוח הפעיל). כל גרסה מסומנת על ידי שם מקוצר.
תגית (tag)
אפשר לסמן גרסה מסוימת בתג. זה מאפשר לתת שם סמלי למקום מסוים (לדוגמה: תג בשם v1.23.5-beta2 יכול לסמל את גרסה מס' 1.23.5-beta2 של התוכנה). בגיט התג יכול לכלול גם חתימה דיגיטלית. בכך אפשר להתחייב על תוכנו של תג.
מיזוג (merge)
בדרך כלל כל גרסה מתקבלת על ידי שינויים בגרסה, צומת, אחד בלבד. על גרסה כזו נאמר שיש לה אב אחד. אולם לפעמים מעוניינים ליצור גרסה חדשה ממיזוג של שתי גרסאות. לדוגמה: ענף פיתוח צדדי שהושלם ממוזג לתוך הענף הראשי. גיט זוכר את ההיסטוריה הזו. לפיכך, לגרסה שהיא מיזוג גרסאות יש שני הורים (ולפעמים אף יותר).

דוגמה, מ-http://tzafrir.org.il/~tzafrir/git_test/.git, של מאגר גיט פשוט:

* 8f56b9b (HEAD, tag: v0.3, master) Some integration work
* 45ace55 Merge branch 'feature-branch'
|\
| * 5f90c8c (feature-branch) Add a new feature
| | * b76c518 (experiment) Testing an experimental feature
| |/
|/|
* | b70df95 (tag: v0.2) Adding a new header
* | b65d3e3 Adding documentation
|/
* 5742dfe (tag: v0.1) Adding hello.

בדוגמה זו נראה מאגר תוכנה קטן. כל גרסה נקראת בשמה המקוצר. שלוש גרסאות סומנו בתגיות (v0.1, v0.2, v0.3). רוב התיקונים נעשו בענף הראשי (master). כל התגיות הם של גרסאות על הענף הראשי. אולם היו שני ענפי פיתוח צדדיים: הענף 'feature-branch' נוצר לאחר גרסה v0.1 ומוזג לענף הראשי לאחר סימון v0.2. הענף השני הוא הענף הניסיוני 'experiment' שלא מוזג עדיין.

איסוף זבל
(gc[3]) - גרסאות נוצרות בצורה אוטומטית. גם כאשר אף אחד לא מתייחס אליהן הן עדיין לא נמחקות. לשם כך צריך לאסוף את הזבל. אפשר ליצור ענפים ותגיות. אפשר גם למחוק אותן. לעומת זאת, את הגרסאות לא מוחקים בצורה מפורשת. אם נמחק את הענף experiment שבדוגמה למעלה, עדיין תישאר הגרסה b76c518, אולם לא תהיה דרך להגיע אליה. כשמפעילים את פעולת איסוף הזבל, גיט מוחק את כל הגרסאות שאינן נגישות מענף או תגית.

שרתעריכה

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

  • פרוטוקול טיפש (dumb)‏ - HTTP‏, HTTPS (כאשר שרתים מאפשרים גישה לקבצים בתיקיה) או כל פרוטוקול אחר שמאפשר גישה לתוכנם של קבצים על שרת מרוחק (לדוגמה: FTP). לקריאה בלבד.
  • שרת גיט: מקשיב בדרך כלל על פורט TCP‏ 9148. לקריאה בלבד.
  • חיבור דרך SSH

ההתחברות דרך SSH או דרך שרת גיט יעילה יותר (מהירה יותר וצורכת פחות נפח תעבורה) מאשר הפרוטוקול הטיפש, מכיוון שאפשר להשתמש במידע בצורה יעילה יותר (בקשת fetch-pack). פרוטוקול גיט לא כולל הזדהות ולכן לא נהוג לאפשר העלאת תוכן דרכו. נהוג לאפשר העלאת תוכן רק דרך SSH (במקרים רבים ההזדהות היא על ידי מפתחות ציבוריים)[4].

ממשקי גיטעריכה

במצבו הטבעי, Git הוא יישום הפועל בטרמינל Linux.

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

הוא חינמי ומגיע בחבילות Linux, BSD, Illumos ומערכות הפעלה אחרות דמויות Unix. הוא נראה כך:

$ git --version 
git version 2.5.3

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





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

השילוב השקוף ביותר מגיע בצורה של תמיכה במנהל קבצים.

מנהל הקבצים KDE, Dolphin, יכול להראות את מצב הגיט של תיקייה ואף ליצור התחייבויות, דחיפות ומשיכות.

Sparkleshare משתמש בגיט כבסיס לממשק שיתוף קבצים משלו בסגנון Dropbox.

סיעוף ומיזוגעריכה

התכונה של גיט שבאמת גורמת לה להתבדל מכמעט כל SCM "ניהול קוד מקור" אחר שם בחוץ, היא מודל הסיעוף שלה.

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

זאת אומרת שתוכל לבצע דברים כמו:

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

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

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

גרסאותעריכה

רשימה של גרסאות :

מקור
תאריך שחרור גרסה מספר גרסה
0.99 11-07-2005
1.0 21-12-2005
1.1 08-01-2006
1.2 12-02-2006
1.3 18-04-2006
1.4 10-06-2006
1.5 14-02-2007
1.6 17-08-2008
1.7 13-02-2010
1.8 21-10-2012
1.9 14-02-2014
2.0 28-05-2014
2.1 16-08-2014
2.2 26-11-2014
2.3 05-02-2015
2.4 30-04-2015
2.5 27-07-2015
2.6 28-09-2015
2.7 04-10-2015
2.8 28-03-2016
2.9 06-06-2016
2.10 02-09-2016
2.11 29-11-2016
2.12 24-02-2017
2.13 10-05-2017
2.14 04-08-2017
2.15 30-10-2017
2.16 17-01-2018
2.17 02-04-2018
2.18 21-06-2018
2.19 10-09-2018
2.20 09-12-2018
2.21 24-02-2019
2.22 07-06-2019
2.23 16-08-2019
2.24 04-11-2019
2.25 13-01-2020

ארגוןעריכה

טורבאלדס פיתח את גיט בחודשים הראשונים. לאחר מכן הפך ג'וניו המאנו למפתח הראשי. גיט לא דורשת השמת זכויות יוצרים, ונכון לסוף 2010 יותר מ-600 אנשים תרמו למיזם קוד[5]. החל מה־16 בדצמבר 2010 המיזם מנוהל בחסות מוסד חופש התוכנה (Software Freedom Conservatory). גוף זה מספק ישות משפטית (לדוגמה: עבור תרומות) וייעוץ משפטי[6].

ראו גםעריכה

קישורים חיצונייםעריכה

  מדיה וקבצים בנושא גיט בוויקישיתוף

הערות שולייםעריכה

  1. ^ ר’ לדוגמה סקר Stack Exchange שמוזכר בהמשך הערך
  2. ^ התשובה של טורבאלדס ברשימת התפוצה של הקרנל
  3. ^ ראשי תיבות של Garbage Collection - איסוף זבל, באנגלית.
  4. ^ סקוט צ'אקון, Pro Git, הוצאת Apress, Pro Git - תת-פרק 4.1: גיט על השרת - הפרוטוקולים. ר' גם תת-פרק 9.6 מאותו הספר למידע טכני נוסף.
  5. ^ מספר התורמים: 683, נכון ל־21 בדצמבר 2010, לפי הדף About Git בדף הבית של המיזם
  6. ^ הודעה לעיתונות על הצטרפות מיזם גיט ל-Software Freedom Conservatory