[נכתב ע”י דניאל קוגל, התמונות מכאן ומכאן]
נושא שמעסיק אותי מעט בזמן האחרון והוא הנושא של ניהול גרסאות.
יצא לי לקרוא ספר נחמד בשם Version Control by Example (אפשר להוריד חינם מכאן)
שמדבר על Version Control System (או בקיצור VCS) ועל Distributed Version Control System (או בקיצור DVCS).
למי שלא מכיר (חמור מאוד!) Version Control System הוא כלי שמאפשר לעשות Revision control או ניהול גרסאות.
מדובר בנדבך חשוב מאוד בתהליך פיתוח בריא של מוצר תוכנה.
יצא לי לעבוד בעיקר עם TFS שזה כלי לניהול גרסאות של Microsoft אשר מחליף את Source Safe הישן, גם הוא של Microsoft.
שמעתי על מתכנתים שעובדים ב-SVN אבל לא יצא לי להיתקל באחד ומכאן הרצון שלי לחלוק את מה שקראתי.
אפשר לשייך את ה-TFS, SourceSafe ו-SVN לדור הקודם של ניהול הגרסאות בו ניהול הגרסאות היה מבוצע על שרת אחד מרוכז (Repository),
כל המשתמשים היו מתחברים אליו ומוסיפים לו את השינויים שלהם (commit) כאשר כל commit מבוסס על commit קודם בגלל שרוב ה-VCS-ים שומרים קבצים בדלתאות:
כאשר שני משתמשים היו מכניסים שינויים באותו הקובץ:
ה-VCS היה מנסה למזג אותם בעצמו לקובץ אחד, אם הדבר לא התאפשר, לדוגמא, כאשר שני אנשים מנסים להכניס שינוי באותה השורה,
המשתמש צריך להתערב ולהצביע על השינויים שיש לבצע (איחוד או דריסה)ובעצם ליצור קובץ חדש אותו מכניסים ל-VCS:
כלומר בכל רגע נתון יש רק גירסה אחת נכונה ועדכנית,
אפשר לבצע Branch על מנת להתחיל תהליך פיתוח שמבוסס על נקודה בזמן ולהתקדם משם ואז אנחנו מקבלים משהו שנראה ככה:
(כל שורה פה היא בעצם Branch /ציר פיתוח)
בניגוד ל- Centralized VCS שבו כל משתמש שרוצה לשמור את השינויים שלו מוסיף אותם ל-branch הראשי בשרת הריכוזי,
ב-DVCS כל משתמש יכול לקחת כל שינוי שהוא רוצה מכל מחשב של משתמש אחר, קצת כמו peer to peer
וכך בעצם אין שרת אחד וגרסה אחת אלא כל גרסה מורכבת מחלקים שונים, mix and match:
אם נסתכל על הציור נראה שהוא מזכיר לנו גרף מכוון ללא מעגלים שזה בדיוק המודל שבו DVCS משתמש.
אפשר להסתכל על DVCS כאילו לכל משתמש יש Repository מקומי על השרת שלו ומולו הוא מתנהל כמו VCS רגיל.
כאשר משתמש רוצה לקחת שינוי (Changeset) או תכולה ((Tag / Label הוא ניגש לשרת של משתמש אחר ולוקח אותם.
כל גירסה מורכבת מאוסף של תכולות שנלקחו מהמחשב הנוכחי או הובאו מכל מחשב אחר.
עדיין אפשר לעבוד עם שרת ריכוזי שיכיל גירסה מסויימת כמו ב-CVCS, רק שעכשיו אפשר גם אחרת. 😃