גיט

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

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

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

היוצר של גיט הוא לינוס טורבאלדס והוא יצר את המערכת באפריל של שנת 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 או main. כמו כן 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' שלא מוזג עדיין.

איסוף זבל (Garbage Collection)[עריכת קוד מקור | עריכה]

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

שרת[עריכת קוד מקור | עריכה]

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

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

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

ממשקי גיט[עריכת קוד מקור | עריכה]

ממשק האתר GitLab

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

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

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

$ git --version
git version 2.5.3

ככל הנראה, ממשקי הגיט הכי מוכרים הם מבוססי אתרים: אתרים כמו GitHub, המקור הפתוח GitLab, Savannah, BitBucket ו-SourceForge כולם מציעים אירוח קוד מקוון כדי למקסם את ההיבט הציבורי והחברתי של קוד פתוח, ברמות שונות, יחד עם GUI מבוסס-דפדפן כדי למזער את עקומת הלמידה של השימוש בגיט. השילוב השקוף ביותר מגיע בצורה של תמיכה במנהל קבצים. מנהל הקבצים KDE, Dolphin, יכול להראות את מצב הגיט של תיקייה ואף ליצור התחייבויות, דחיפות ומשיכות. SparkleShare (אנ') משתמשת בגיט כבסיס לממשק שיתוף קבצים בסגנון Dropbox.

סיעוף ומיזוג[עריכת קוד מקור | עריכה]

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

בקרב המפתחים קיימות קונבנציות לשמות של ענפים בהתאם לתפקידם, ונהוג שלכל פרויקט יש ענף ראשי שכל הענפים מסתעפים ממנו, ומתמזגים אליו בסיום הפיתוח הנקודתי. במשך שנים רבות היה נהוג לכנות את הענף הראשי בשם "master", אך ב-2021 שונה השם ל-"main" בעקבות מחאות על הקונוטציה השלילית של השם master שמתקשרת לעבדות.[5] ענף נוסף שנהוג להשתמש בו הוא "develop" - ענף שמשמש לייצוג גרסת הפיתוח היציבה שעדיין לא שוחררה לשימוש. לעיתים נעשה שימוש גם ב-"stable" שמשמש ליצוג הגרסה האחרונה של מערכת שהיא יציבה בוודאות.[6]

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

גרסאות[עריכת קוד מקור | עריכה]

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

מקור
תאריך שחרור גרסה מספר גרסה
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 אנשים תרמו קוד למיזם.[7] החל מה־16 בדצמבר 2010 המיזם מנוהל בחסות מוסד חופש התוכנה (Software Freedom Conservatory). גוף זה מספק ישות משפטית (לדוגמה: עבור תרומות) וייעוץ משפטי.[8]

ראו גם[עריכת קוד מקור | עריכה]

קישורים חיצוניים[עריכת קוד מקור | עריכה]

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

הערות שוליים[עריכת קוד מקור | עריכה]

  1. ^ ראה לדוגמה סקר Stack Exchange שמוזכר בהמשך הערך
  2. ^ Linus Torvalds, Kernel SCM saga, Linux-Kernel, התשובה של טרובאלדס, ‏7 באפריל 2005
  3. ^ סקוט צ'אקון, Git on the Server - The Protocols
  4. ^ Git Internals - Transfer Protocols
  5. ^ Catalin Cimpanu, GitHub to replace "master" with alternative term to avoid slavery references, ‏14 ביוני 2020
  6. ^ Vincent Driessen, A successful Git branching model, ‏5 בינואר 2010
  7. ^ מספר התורמים: 683, נכון ל־21 בדצמבר 2010, לפי הדף About Git בדף הבית של המיזם
  8. ^ הודעה לעיתונות על הצטרפות מיזם גיט ל-Software Freedom Conservatory