גיט

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש
Git
Git-logo.svg
מפתח ג'וניו המאנו, לינוס טורבאלדס
גרסה אחרונה 1.8.3.2 ב־28 ביוני 2013 (לפני שנה ו־5 חודשים)
מערכת הפעלה חוצה-פלטפורמות
שפות תכנות C, Bourne Shell, Tcl, Perl
רישיון הרישיון הציבורי הכללי של גנו גרסה 2
קטגוריה ניהול גרסאות
git-scm.com

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

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

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

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

גיט היא מערכת ניהול גרסאות מבוזרת - כל עותק מקומי של המאגר מכיל את כל המידע (כל ההיסטוריה). המידע הזה נשמר בדרך כלל בתת-תיקיה בשם "‎.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) בדרך כלל כל שינוי מבוסס על שינוי קודם אחד. אולם לפעמים מעוניינים למזג שני ענפי פיתוח. לדוגמה: ענף פיתוח צדדי שהושלם ממוזג לתוך הענף הראשי. גיט זוכר את ההיסטוריה הזו. לכן לגרסה שהיא מיזוג יש שני הורים (ולפעמים אף יותר).

דוגמה מאגר גיט פשוט:

‎* 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) - גרסאות נוצרות בצורה אוטומטית. גם כאשר אף אחד לא מתייחס אליהן הן עדיין לא נמחקות. לשם כך צריך לאסוף את הזבל. אפשר ליצור ענפים ותגיות. אפשר גם למחוק אותן. לעומת זאת, את הגרסאות לא מוחקים בצורה מפורשת. אם נמחוק את הענף experiment שבדוגמה למעלה, עדיין תישאר הגרסה b76c518, אולם לא תהיה דרך להגיע אליה. כשמפעילים את פעולת איסוף הזבל, גיט מוחק את כל הגרסאות שאינן נגישות מענף או תגית.

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

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

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

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

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

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

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

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

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

ישנם אתרים רבים שמספקים שרותי ארוח, הראשון[דרוש מקור] היה repo.or.cz‏[5] אשר מספק אפשרות אירוח פשוטה של מאגרי גיט. משתמשים מזוהים על ידי מפתחות ציבוריים של SSH. כיום האתר הפופולרי ביותר לארוח מאגרי גיט[דרוש מקור] הוא גיטהאב.

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

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

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

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