ניהול גרסאות עם Subversion

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

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

עד עכשיו עבדתי באופן כמעט בלעדי עם מערכת שנקראת “CVS”. זוהי מערכת ותיקה, מאוד אמינה ומאוד פשוטה. חסרונה המרכזי של המערכת הוא בדבר אחד פשוט – היא עובדת על כל קובץ בנפרד. שינויים שהם שינויים לרוחב הפרוייקט, כמו שינוי שם של קובץ או שינוי בכמה קבצים בו-זמנית, CVS מפרק לשינויים בכל קובץ בנפרד ושומר בהתאם.

לצורך הדוגמא – rsyncrypto התחיל את דרכו עם קבצים בסיומת “cc”, שהיא הדרך המקובלת לציין קבצי C++‎ ביוניקס. בגרסה 0.14 של הפרוייקט עלה הצורך לייצר לו גרסת חלונות. בחלונות מקובל לסמן קבצי C++‎ באמצעות הסיומת cpp. מכיוון שיוניקס (ולינוקס) מסתדרים הרבה יותר טוב עם הסיומת cpp לקבצי C++‎ מאשר חלונות עם הסיומת cc, הייתי צריך לשנות את שמם של על קבצי קוד המקור של הפרוייקט. מי שמסתכל היום על קובץ בפרוייקט (למשל, main.cpp) יכול לקבל את הרושם שהקובץ לא היה קיים לפני גרסה 0.14. זוהי הגרסה הראשונה שמופיעה במערכת ניהול הגרסאות. רק מי שמבקש חתכים של כל הפרוייקט יגלה שלפני גרסה זו היה קובץ בשם main.cc, שהיא בעצם אותו הקובץ תחת שם אחר. ההיסטוריה (אותה אפשר לראות אם לוחצים על הקישורים שנתתי) לא עברה מהקובץ הישן לקובץ החדש. מי שרוצה לדעת מה קרה לקובץ טרם היותו בשם האחרון שלו עלול לא למצוא את הקובץ הקודם, ולא לדעת מה ההיסטוריה.

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

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

אבל עכשיו התחלנו לעבוד פנימית בלינגנו עם מערכת שנקראת SubVersion. מכל המערכות החופשיות שמחליפות את CVS, זו המערכת הבשלה והסטנדרטית ביותר. אני חייב להגיד שאני לא עובד איתו הרבה מידי זמן, וכבר מאוד מאוד מרוצה. מעבר לתמיכה בדברים שחסרים ב-CVS, הדבר המרכזי שטוב הוא זה – הוא לא מדבר עם השרת אלא אם צריך מידע מעודכן. CVS נהג לדבר עם השרת על כל פעולה – בדיקת מה השתנה אצלך, השוואות עם המקור, גרסאות – הכל. Subversion כמעט ולא מדבר אף פעם. כל הנ”ל הן שאילתות שאפשר לעשות על לאפטופ שמנותק מהרשת (או, במקרה שלי, מחובר לרשת, אבל מופרד מהשרת בפיירוול שבו ה-VPN עוד לא עובד :-). הכל קורה מהר ובצורה טובה.

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

שחר

מאת

שחר שמש

מייסד–שותף וחבר ועד בתנועה לזכויות דיגיטליות מייסד שותף בעמותת „המקור”. פעיל קוד פתוח. מפתח שפת התכנות Practical

18 תגובות בנושא “ניהול גרסאות עם Subversion”

    1. איפה להתחיל?

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

      אחרי שדיברנו על זה אני יכול להתחיל לדבר על תמיכה חלקית בלבד בפיתוח במקביל, ושאר ירקות. המלצה שלי – אם אתה שוקל להשתמש ב-VSS, עשה לעצמך טובה ותבדוק את WinCVShttp://www.wincvs.org/">WinCVS.

      כמובן שבמקרה שלי יש ל-VSS עוד חסרון שפוסל אותו על הסף – הוא לא רץ על לינוקס. כל הכלים האחרים שציינתי (CVS, Subversion, ClearCase) נתמכים הן בלינוקס והן בחלונות.

      שחר

      1. בהחלט WINCVS :).

        VSS בכלל עובד בשיטה שונה מכל הכלים שהוזכרו והוא אינו מתאים לפיתוח בקוד פתוח אשר לאנשים רבים מגיעים אותם זכויות. בVSS יש את הקטע של הנעילות של קובץ לעבודה ושצריך לשחרר נעילה לפני שמישהו אחר יכול לעבוד וכד’.
        בשאר הכלים (חוץ מCLEARCASE שאני לא מכיר) כולם יכולים לערוך את הקובץ במקביל ולשלוח שינויים במקביל.

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

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

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

          אבל אפילו נניח שנמצאות שגיאות "רק" כל חודש – האם זו המערכת שאתה רוצה שתשמור את כל קבצי המקור שלך?

          שחר

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

          2. מה זאת אומרת? כשהתכוונתי "מתריע" התכוונתי להודעות שעולות בסריקה שאני מבצע מדי X ימים/שבועות – הרבה לפני ש"משתמש הקצה" של ה- VSS מרגיש בכך.

            לא שאפשר לקרוא לזה כלים, כולה סקריפט מעפאן.. (או שפספסתי משהו?)

  1. ClearCase הוא מהשטן, לצערי אני נאלץ לעבוד איתו.
    אלה התכונות שאני מתעב בו:
    – כל דבר כולל פניה לשרת, כולל פתיחה של פרוייקט בויזואל סטודיו של חלונות.
    – צריך להחזיק איש תמיכה במשרה מלאה, או לשלם שעות תמיכה עבור תחזוקה שוטפת לשרת ( הוספת משתמשים, יצירת פרוייקטים שונים, הוספה של עץ קבצים חדש) .
    – שורת פקודה לא מתועדת בבהירות (ובנוסף, מציע לעשות מרג’ לקבצים בינאריים!)
    – כלי merge גרפי לא ברור בהתנהגות.
    תכונות חיוביות:
    + תומך בפיתוח מקבילי ( בין מפתחים – סטרים נפרד, ובין באגים שונים של אותו מפתח – view נפרד)
    +כלי גרפי למעקב אחרי שינויים ועדכונים

    1. אני חושב שחלק מהדברים שאתה מציין הם לא מחוייבי המציאות:
      – פניה לשרת – יש ל-ClearCase מוד סטטי ומוד דינמי. במוד הסטטי אפשר לעבוד בלי השרת בכלל.
      טוב, אחד הדברים.

      מצד שני, SubVersion לא עושה רושם של תמיכה פחות מלאה ביצירת branches לצרכים מקומיים, מה שמאפשר את אותה רמת מיקבול.

      לגבי כלי גרפי – אני יודע ש-WinCVS יודע להציג עץ של מה קרה לקוד המקור שלך. אני לא יודע להגיד אם אותו הדבר קיים גם ל-SVN.

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

      שחר

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

  2. I love SubVersion too, I sat down and read its manual cover-to-cover when version 1.0 went out and wish we used it in my current workplace.

    About the CVS renaming – in order to avoid file history lose in CVS when renaming you could rename the file in the repository itself. Of course it’s a hack but it works.

    As for use of SubVersion – the reason given to me in my current workplace against moving from CVS to SubVersion is that SubVersion uses BerkeleyDB to hold its entire repository. BerkeleyDB, with all due respect, is not 100% bulltet proof (that I say from personal experience of using it in my previous workplace, with all the fondness I have for the product and its makers).
    Take-away from this point – backup your SVN repository. and make sure it’s in a sane condition.

    (to be continued)

    1. (continued)

      And one last thing – I think the greatest thing about SVN is the transactional nature of its operations – you can either commit an entire change-set across multiple files or abort all of it.
      This means that whoever checks out a version from the repository will get a complete change-set and not a version which is half-checked in by someone else as can easely happen with CVS.

      (When I told someone who swears by Perforce about SVN 1.0 he said he would switch to it if he haven’t been invested in Perforce already)

      1. דבר ראשון – subversion כבר לא עובד רק עם BerkelyDB. הם ממליצים לא לעבוד איתו, ואני קיבלתי את המלצתם. אם זו ההסתייגות שלך מ-SVN, זה הזמן לבדוק את המוצר שוב.

        לגבי Perforce – אני מתחזק מערכת כזו עבור לקוח, אבל לא יצא לי להסתכל עליה מקרוב. אם אתה אומר שהיא לא ברמה של SVN, אני חושב שאני גם לא אטרח (מה גם שהיא קניינית והכל)

        שחר

  3. The story about Perforce is thus:

    Back in 2000 a small startup I startted to work for looked wide and hard at the version control systems and settled on Perforce, and was VERY happy with its choice since.
    (They wrote lots of Perl scripts to enforce and automate work procedures). He said what he said because SVN finally gives the strength of P4 with a free license.

    Around 2004 SVN 1.0 was released, I read about it and told the guy in that startup about it, then he said what he said, which I consider to be a big endoresement of SVN from a top professional.

    As for the non-BDB backend – I’ll check this and try to raise SVN option again, as I’m really fond of it, doubly so when the alternative is CVS (I work in a different workplace than the one with Perforce).

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

סגור לתגובות.