במאמר על CAMS model הסברתי כמה חשוב זה שיתוף, מדידות, אוטומציה ותרבות. בעיניי, git הוא כלי שמבוסס על שניים מהעקרונות הללו:
- שיתוף: כיוון שיש שרת שמאחסן את כל הקוד שלנו וכולם יכולים לגשת אליו, זה מגביר את השיתופיות והשקיפות בארגון.
- תרבות: בעזרת git אפשר ליצור תרבות שמבוססת על ניהול נכון של קוד, תיעוד ושמירה על “גיבוי” תמידי של הקוד שכן אפשר לגבות את השרת שמחזיק את הקוד. בנוסף, לכל אחד מהאנשים יש עותק של הקוד על מחשבם האישי.
במאמר אתמקד בנושאים הבאים בהקשר של git:
- מה זה?
- בשביל מה הוא נועד?
- איך משתמשים בו?
Git היא מערכת ניהול גרסאות חינמית שמבוססת על קוד פתוח (בגדול כל אחד יכול לתרום לפרויקט). היא מסייעת למפתחים לנהל את הקוד שלהם בצורה נוחה, מהירה ושקופה.
ההתקנה של git היא ממש פשוטה: ב-Windows צריך רק להוריד ולהריץ קובץ, ובלינוקס – להריץ פקודה של שורה אחת. מוזמנים לקרוא באינטרנט.
אפשר לחלק מערכות ניהול קוד לשתי קטגוריות: CVCS, DVCS:
Distributed & Centralized version control system
ההבדל המרכזי בין מערכות שהן Distributed לבין למערכות שהן Centralized הוא שבמערכות centralized הפרויקט נמצא רק במקום אחד וכולם עובדים עליו במקביל, בעוד שבמערכות distributed – כל אחד מחזיק עותק לוקאלי של הפרויקט. git היא distributed.
בנוסף, מערכות distributed מאפשרות לעבוד offline עם עותק של הפרויקט. כל עותק כזה משמש סוג של גיבוי במקרה שמשהו משתבש.
מצורף תרשים עבור כל אחד מהסוגים:
Centralized Version Control System
Distributed Version Control System
היתרונות הבולטים של מערכות distributed הן: התמודדות טובה עם שינויים תכופים, שקיפות לכולם, עבודה גם ב offline, סדר, ומהירות.
במערכות centrlized יש הרבה חסרונות כמו שאפשר להבין, אבל כן יש להם כמה יתרונות: קל יותר להבין מערכות שהן centralized וקל יותר לנהל את השרת שלהם. מנקודת המבט שלי, זה יכול להתאים במקרים של פרוייקטים מאוד קטנים. הרוב המוחלט של פרויקטי פיתוח מנוהלים במערכות distributed.
בשורה התחתונה, git הוא כלי חזק וחשוב שמאפשר למפתחים לנהל את הפרויקטים שלהם בצורה נכונה, עם המון פיצ’רים חשובים ומגניבים.
** ה-repository שרואים בתרשימים הוא בעצם שרתים שמאפשרים לנו לאחסן בהם פרויקטים ולנהל אותם כגון:
GitHub, GitLab, Bitbucket.
הכנתי עבורכם “דף מושגים” שיעזור לכם לזכור כמה פקודות בסיסיות וחשובות. כשעובדים עם git, מומלץ לעבוד עם git bash.
git commands
פקודה | הסבר |
git init | נריץ בתוך תיקייה שבה נרצה שיישב הפרויקט שלנו. זה ייצור לנו תיקייה בשם .git וכך נסמן ל git להתחיל לעקוב אחרי מה שקורה בתיקייה. |
git add | אחרי שיש פרויקט שgit עוקב אחריו, נוכל לשים בתוכו קבצים ולאחר מכן להוסיף אותם בעזרת git add. מבחינת git זה יעביר את הקובץ לשלב ה-staging משלב שgit לא עוקב אחריו -untracked. |
git commit | לאחר שהוספנו את הקובץ לשלב ה staging (ה-git עוקב אחריו), נוכל להוסיף אותו ל localrepo (השלב הסופי לפני ההעלאה לשרת חיצוני). commit זה ממש snapshot של הקבצים שעליהם עשינו את הפקודה. |
git branch | כך נוכל לסעף את הפרויקט שלנו לכמה ענפים שונים, שבכל אחד מהם נעבוד על דברים שונים ולבסוף נאחד את התוכן שלהם לענף אחד שיכיל את כל הענפים. |
git checkout | הפקודה מאפשרת לנו לחזור ל-snapshot קודם באותו branch (הכוונה ל-commit אחר) או לעבור ל-branch אחר. |
git push | דחיפת השינויים משלב ה-localrepo לשרת המארח. כל פעם שנעשה שינוי נצטרך לעבור את התהליך של git add, git commit, git push מחדש כדי שהקבצים יעלו לשרת. |
git pull | כך נמשוך שינויים מהשרת אלינו. לדוגמא, אם מישהו אחר עבד על משהו במחשב שלו, העלה לשרת ואנחנו רוצים שהשינויים האלו יהיו אצלנו. במקרים ששנינו ערכנו את אותו קובץ, יהיו קונפליקטים ונצטרך לפתור אותם בצורה ידנית (למחוק את השורות הלא רצויות). |
git status | פקודה שמאפשרת לראות את הסטטוס של הrepo הלוקאלי שלנו, איזה קבצים נמצאים באיזה שלב. |
git config | פקודה שמאפשרת להגדיר הגדרות שקשורות ל-git כגון: המייל שלנו (שבסוף יופיע בשרת המארח), היזור והסיסמא של השרת המארח ועוד הרבה מאוד דברים. |
git diff | כך נראה את השינויים בין קבצים בכל מיני שלבים שונים (כמו בין ה-working ל-staging ובין ה-staging ל-localrepo). |
git clone | פקודה שמאפשרת לי “להוריד” פרויקט מהשרת למחשב שלי, לתיקייה שבה אני מריץ את הפקודה. היא גם תאתחל את התיקייה עם git. |
בתרשים הבא נראה את ה–workflow של git:
הסבר על השלבים ב-workflow
שלב | הסבר |
working directory | שלב שבו git לא עוקב אחרי התוכן בתיקייה שבה הוא יושב. הקבצים והתיקיות בו הם “untracked”. |
staging area | בשלב הזה git עוקב אחרי התוכן שאותו הוספנו ולאחר שינוי שלו, נצטרך להוסיף אותו מחדש ל-staging area. |
localrepo | שלב שממנו עובדים מול השרת המרוחק (remote repo). בסוף, שם אמורים להיות כל השינויים שביצענו באופן לוקאלי. |
remote repo | שם יושב הקוד שלנו באופן מרוחק, שממנו אחרים גם יוכלו למשוך שינויים. |
אני ממליץ ללמוד את הנושא עם התנסות מעשית, זאת הדרך הכי טובה להבין ולהפנים את הנושא.
אתר מומלץ:
אני מזמין אתכם לחשוב על כל מיני use cases מאתגרים שיכולים להיווצר ולנסות לפתור אותם בעצמכם! לדוגמא, אם עשיתי commit ועוד commit ועוד commit ואני מחליט שאני רוצה “להיפטר” משני ה commitים האחרונים, איך אפשר לעשות את זה?
אחרי זה, כדאי להוריד למחשב ולהתנסות בעצמכם ? עם מערכות כמו GitHub/GitLab/Bitbucket וכו’.
תודה רבה!
מסביר בצורה מאוד ברורה וממש עושה סדר.