Git - לא לבעלי לב חלש

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

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

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

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

כדי להוסיף קושי, התיעוד של git נכתב ע"י מפתחי קרנל, ככה שהוא מניח שאתה כבר יודע הרבה מאוד על ניהול קוד, וכתוב לרוב כתזכורת למי שכבר יודע מה לעשות. אני יכול לעקוב אחרי התיעוד ולמצוא מה כדאי לקרוא מעבר לפקודה הספציפית שאני מחפש, אבל מישהו עם פחות ניסיון לא יצליח. גם תיעוד כללי, כזה שמסביר את התמונה הכללית של עבודה עם git חסר, למרות שמתחילים להופיע דפים כמו How to use git without feeling stupid ומדריכים שונים, ואפילו הספר הקהילתי על git; נראה שכולם מקבלים את הטענה שלגיט יש עקומת למידה תלולה.

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


וידאו: Tech Talk: Linus Torvalds on git

ידיעות נוספות
תעוד ספגטי
ייחודיות וקבוצות בשפות שונות
אבן רוזטה


קישורים שימושים
http://git-scm.com
http://book.git-scm.com
http://repo.or.cz
http://gitorious.org
http://github.com
learn.github
Visual git tutorial I
The Git Parable
Using Git with Vim


* עריכה (קישורים): אורי

אפשרויות לתצוגת תגובות

בחרו באפשרות התצוגה הרצויה, ולחצו על "שמור הגדרות".

תיעוד של git

svn (כמערכת לא מבוזרת) הרבה פחות טובה למצב די שכיח: "עבודה מהבית". בפרט כל מה שקשור בצפיה בהסטוריה פשוט חסר. העותק המקומי הוא חתך אחד בהסטוריה.

כדי לקבל עבודה קצת יותר אינטואיטיבית עם git משורת הפקודה, כדאי להשתמש ב־programmable completion של bash .

בחזית התיעוד: הנה שיפור קטן מהשבוע האחרון: http://progit.org/book

צפריר

לשם כך יש את bzr, ש...

לשם כך יש את bzr, שהוא ממש קל לשימוש.
---
גם בבלוג

או Mercurial

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

גם אני מצביע לH

חזק כמו git אבל הגיוני ומובן. יש אפילו מדריך(!) רישמי(!!) באנגלית מובנת(!!!).

צ"ל Hg, Mercuri

מה? אין אופציה לתגובה ללא תוכן?

וכמובן יש גם את

מערכת קלה ביותר ללימוד.

ידע מינימלי לשי

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

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

לדוגמה: אתה יכול לעבוד עם git גם בלי לדעת מה זה fast forward merge, octopus merge או pickaxe.

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

צפריר

אפשר לחלוק על מה נמצא באיזה קבוצה

למשל, כשאתה מקבל הודעת שגיאה בסגנון "pull did not result in fast-forward merge" אתה פתאום רוצה לדעת מה זה. אבל בעיקרון זה נכון: אפשר ללמוד בשלבים, רק השאלה מה גובה השלבים ואם הגובה מתאים לכולם או רק לאנשים שכבר מנוסים בעניינים כאלה.

תלוי איזה נסיון

נסיון של עבודה עם subversion לא בהכרח עוזר ללמוד לעבוד עם git - יש הרבה דברים שונים.

למעשה הרבה מהתלונות נגד git הם יותר על כך שהוא "שונה" (מהמסורת של rcs/cvs/svn) מאשר על כך שהוא "לא אינטואיטיבי".

צפריר

חחח הזדהתי עם כל מילה לפי דעתי צריך להקים קבוצת תמיכה ל

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

אני בחרתי בגיט

אין ספק שהיא טובה מאוד למי שמבין עניין.