כיצד תבחרו את מנהל הקוד המבוזר שלכם? To Git or not to Git

הגישה המבוזרת לניהול קוד (Distributed Source Control) הולכת ותופסת את מקומה של הגישה הריכוזית שמלכה בכיפה זה זמן רב. השאלה כיצד לבחור את מנהל הקוד המתאים ביותר עבורכם מילאה דפים רבים פרי-עטם של חסידי Git, Mercurial ו Bazaar. זהר ארד מביא סקירה של שלושת מנהלי הקוד המבוזרים הפופולרים.

ניהול קוד מבוזר

ניהול קוד מבוזר

לאחרונה יצא לי להתחבט בשאלה “איזה מנהל גרסאות קוד מבוזר הכי טוב? Git או אולי Mercurial או Bazaar”.

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

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

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

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

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

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

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

יתרונות:

מהירות – רבותי, שלא יהיו לכם אשליות. Git הוא כלי מהיר, יעיל וזריז כמכונית ספורט מאיטליה. למי שהורגל לעבוד עם SVN או Team Foundation Server נכונה הפתעה נעימה.

כוח – Git הוא בהחלט כלי למתקדמים ומאפשר למשתמשיו (לאחר שלמדו אותו על בוריו) לבצע ביעילות את כל פעולות השכיחות יותר ופחות הכרוכות בניהול קוד.

ניהול ענפים מצויין – אחד מיתרונותיו הבולטים של Git הוא בניהול ענפי פיתוח (branches), דבר המאפשר הטמעת תהליכי עבודה מסודרים בפרוייקט מרובה-משתתפים או פיצ’רים בצורה קלה ונוחה מאוד.

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

חסרונות:

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

נדידות (portability) – למרבה הצער, סביבתו הטבעית של Git היא לינוקס (ויוניקס) אך לא חלונות. למרות שיש גירסה לחלונות עדיין ייתכנו בעיות בעבודה עם Git בסביבה מעורבת (חלונות ולינוקס), בעיקר בשל הבדלים בתווי סיום השורה בין שתי המערכות שקצת משגעות את Git.

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

כוח – Git הוא כלי שמניח שמשתמשיו יודעים מה הם עושים ומאפשר להם למעשה לעשות הרבה מאוד, כולל לחרב לחלוטין את מאגר הקוד, אם זה רצונם. כמאמר דודו של ספיירמן – “With great power comes great responsibility” – ראו הוזהרתם.

לפני קבלת ההחלטה, שווה לקחת בחשבון כמה נקודות נוספות שאינן בגדר יתרון או חיסרון:

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

Git Serve – ניתן לעבוד מול מאגר משותף של Git באמצעות מספר פרוטוקולים, כולל HTTP, SSH, ופרוטוקול ייחודי ל Git. אם אין לכם אפשרות לעבוד ב SSH שווה לבדוק לעומק את החלופות (HTTP, WebDAV) מכיוון שמנגנון ניהול הרשאות הגישה והכתיבה של Git שלא ע”ג SSH לוקה בחסר.

ניהול פרוייקטים – אם אתם עובדים עם מערכת לניהול פרוייקטים ובאגים (Issue / Bug tracking) שווה לבדוק אם יש לה תמיכה ב Git. לשתים מהפופולריות – Trac ו Redmine יש תמיכה טובה ב Git אך בכל מקרה שווה לבדוק לפני שמחליטים לעבור.

סיכום:

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

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

להגיש חזק, עם שתיים סוכר.

פוסט הבא נסקור את Mercurial ו Bazaar אחיו הקטנים של Git

קישורים:

Git Project
Github
Redmine
Trac
Git Book

זהר ארד

בן 35, קיבוצניק שהדרים לעיר הגדולה, מפתח client-side בנשמתו (מטהקפה, קול הקמפוס 106fm ואחרים). משתמש מקינטוש מושבע (שחוטא גם בלינוקס בשעות הפנאי). מעדיף הכל פשוט, מינימליסטי ועובד טוב ומשתדל להמנע מדברים עם הלוגו של מיקרוסופט ונהגי מוניות כעסנים. אוהב הרבה Web, מתובלת בג'אווהסקריפט, HTML, CSS, פייתון ורובי, ספרים, פפאיות ומוזיקה מהחנות (בדיסק המקורי). מתנודד תדיר בין אקזיסטנציאליזם לאינדיבידואליזם ונכון להיום עדיין אוחז ב-fetish לא מוסבר לצבים.

הגב

8 Comments on "כיצד תבחרו את מנהל הקוד המבוזר שלכם? To Git or not to Git"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 
Sort by:   newest | oldest | most voted
קוקו ג'מבו
Guest

מעניין, אך כמו שאמרת למשתמשי חלונות (אני למשל) שמפתחים בסביבת מייקרוסופט עדיין אין קליינט Git ראוי, מה שמאלץ אותי לעבוד מול SubVersion ועם קליינט TortoiseSVN. אומנם לא מנהל גירסאות מבזור אך עובד בצורה מעולה וקלה + קיימת אינטגרציה מלאה עם Redmine. מומלץ למתחילים ולעובדים בחלונות.

astupidog
Guest

אני עובד עם http://code.google.com/p/msysgit/ בחלונות, ועם הgit הרגיל בלינוקס ולא נתקלתי בבעיות.

בתוכנה הנ”ל לחלונות יש אפשרות לעבוד עם git-gui או לפתוח bash shell עם git ואז לעבוד שם.

זהר
Guest

אכן הכל נכון, יש Git לחלונות ויש גם GUI שעוזר (קוקו – יש TortoisGit לחלונות) וכמובן bash.
הרושם שלי הוא שעל חלונות Git עובד קצת יותר לאט ויש משהו קצת מוזר בקליינט לעומת אחיו היונקסים / לינוקסים.

astupidog – איך קינפגת את ה Git שלך על חלונות להמנע מצרות ה CRLF?

סער
Guest

Rational Teram Concert מבית IBM הוא מתמודד ראוי לתואר גם כן.
עם ממשק גרפי גם ליוניקס ולינוקס (בודאי שלחלונות) וגרסא חינם עד 10 משתמשים הוא בהחלט מתמודד ראוי, מה גם שהוא מכיל בתוכו כלים נוספים כגון ניהול שינויים וניהול תהליך פיתוח.
http://www.jazz.net

trackback

[…] אל הפוסט כיצד תבחרו את מנהל הקוד המבוזר שלכם? To Git or not to Git […]

trackback

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

mio
Guest
GIT לחלונות הולך ומשתפר. mysysgit go עם git-extention מעליו עובד יפה ומהווה פתרון ראוי למאותגרי שורתפקודה. הוא אכן איטי יותר ולא כל התכונות כבר ממומשות אבל מה שחשוב נמצא. מנגנון הרשאות הכתיבה והקריאה של GIT לא לוקה בחסר, הוא פשוט לא קיים. ארגונים שמתעקשים לנהל רשימות גישה מבוססות בראנצ’ים או חלקים מהעץ – זה לא בשבילם. לטעמי, אחרי שצלחת את עקומת הלמידה, GIT יכול להעשיר את סביבת העבודה שלך ואת היכולת שלך לעבוד במקביל (עם עצמך), לנסות נסיונות ולזרוק אותם, לשתף פעולה עם אחרים (עם ובלי תשתיות תומכות) ועוד המון. קצת כמו טלפון חכם, אפשר להשתמש בו על מנת לדבר… Read more »
bainternet
Guest

יש חלופה חדשה יחסית FOSSIL (מהמפתח של SQLite) עם עקומת למידה פשוטה יחסית שעובדת יפה מאוד על LINUX וWINDOWS עם מערכת וויקי,באג טיקיטס ובלוג מובנים במערכת הWEB UI המובנת.

למרות זאת כל מי שאכן ישתמש בGIT ויבין “מה הולך שם” יתקשה לעבוד בלי זה לאחר זמן קצר מאוד.

גילוי נאות: אני משתמש כבד (בGIT) כבר מעל שנתיים.

wpDiscuz

תגיות לכתבה: