עבודה עם Git

שימוש בסיסי ב-Git: מערכת מבוזרת לניהול גרסאות תוכנה שניתן להתקין אותה על לינוקס ולהשתמש בה בקלות וביעילות.

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

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

במדריך זה אני אעבור על פקודות בסיסיות ב-Git על מנת להראות שהשד אינו כל כך נורא וקל למי שיודע לינוקס להסתדר נפלא עם Git.

התקנה ויצירת פרויקט

התקנת Git על לינוקס דביאן:


sudo apt-get install git-core

בנוסף אנו נתקין את הכלי meld שהוא הכלי האהוב עלי להשוואה בין גרסאות, אבל אפשר להתקין כל כלי אחר כדוגמת: merge tool candidates: opendiff kdiff3 tkdiff xxdiff kompare gvimdiff diffuse ecmerge p4merge araxis emerge vimdiff


sudo apt-get install meld

נתקין גם כמה כלים של git: הראשון הוא gitk והשני הוא git-gui:


sudo apt-get install gitk
sudo apt-get install git gui

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

אחרי ההתקנה, ניגש לתיקית הפרויקט, לצורך העניין התיקיה נמצאת ב: /home/ran/workspace/example_project הפרויקט שלי מכיל קובץ אחד בלבד – קובץ HTML של Hello world.

קובץ לדוגמא
קובץ לדוגמא

יצירת repository

ננווט אל תוך התיקיה שלנו ונכתוב


git init

זה ייצור לנו את ה-Repository הריק, נכניס לתוך הגרסה הראשונה את כל הקבצים באמצעות:


git add .

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


git commit

יפתח לנו עורך nano שבו אנו יכולים להכניס הערות. אחרי כן יש ללחוץ על ctrl+X ושמירה. זה הכל, יופיע בפנינו משהו בסגנון המסר הבא:


[master (root-commit) 44f323f] Committer: Ran  On branch master Changes to be committed: 	new file:   index.html

בתיקית הפרויקט אנו נראה תיקיה ששמה הוא git. זהו! יש לנו repository!

שינויים ו-merge

בואו נבצע שינוי כלשהו בקובץ! נניח, נשנה את השם של Hello World ל-Hello Israel. נשמור ואז נכתוב:


git diff

על מנת לראות את כל הקבצים ששינינו. אם אנו רוצים כלי יותר אינטואטיבי, אנו נכתוב:


git difftool

ונקבל משהו בסגנון הזה (אם התקנו כבר את meld).

כלי ה-Meld
כלי ה-Meld

אחרי שבחנו את השינויים, אנחנו יכולים להעלות את הגרסה עם commit -a.

בדיקת הלוג של כל הגרסאות נעשית באמצעות git log, אנו נקבל משהו כזה:


commit 5eff03c1e4e20a023317841e0b17ddfd2e57fd62
Author: Ran 
Date:   Sun Sep 26 22:50:43 2010 +0200

     Changes to be committed:
        modified:   index.html

commit 44f323fd74ab513afc05b032a1dc2a0603bb25cd
Author: Ran 
Date:   Sun Sep 26 22:01:38 2010 +0200

    Committer: Ran 
    On branch master
    Changes to be committed:
        new file:   index.html


ה-SHA1 (המספר הארוך שמופיע ליד ה-commit) הוא די מפחיד אבל זה המזהה החד חד ערכי של ה-commit.

בואו וניצור ענף חדש לתוכנה שלנו, את זה אני עושה באמצעות הפקודה git branch ואז שם הענף – למשל arabversion:


git branch arabversion

מה שיפה ב-git הוא שאני מבצע את ה-checkout באותה ספריה שבה אני מריץ כבר את ה-master, את זה אני עושה בפקודה הבאה:


git checkout arabversion

והופ! הוא מודיע לי שאני עובד על arabversion, אני יכול לעשות commitים כרצוני, אני רוצה לעבור ל-branch אחר או ל-master? (ה-root נקרא master), כל מה שאני עושה זה:


git checkout root

ואל תגידו שזה לא גאוני! אני יכול לדעת באיזה branch אני נמצא וכמה יש לי בכלל באמצעות הפקודה:


git branch

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

merge לתוך ה-master גם הוא קל, אחרי שסיימתי עם ה-branch שלי (במקרה הזה arabversion), אני כותב:


git merge arabversion

מה שיפה הוא שכל ההיסטוריה של ה-branch נשמרת. ונניח שאני רוצה לבצע blame ולראות מי כתב מה? מאד פשוט: git blame ושם הקובץ…

שני כלים נוספים שהורדנו בהתחלה הם gitk ו git-gui ששווה לבדוק. הם כלים גרפיים המסייעים לנו לנהל את git.

הכוח הגדול של Git הוא ביכולת של כל מפתח לשאוב באמצעות url (אפילו url פנימי) את ה-master וב-merge שקל לעשות. אבל ההסברים שנתתי כאן מאפשרים להתחיל לעבוד ב-Git באופן בסיסי במחשב המקומי או בשרת הפיתוח אם אתה עובד לבד. בהמשך אפרסם מאמר שמראה כיצד לנהל את Git למספר משתמשים.

פוסטים נוספים שכדאי לקרוא

פתרונות ומאמרים על פיתוח אינטרנט

יישום של nonce על מנת להגן מפני התקפות injection

בפוסט הקודם הסברתי על hash עם CSP על משאבי inline – שזה נחמד ומעולה אבל פחות ישים בעולם האמיתי שבו בדרך כלל התוכן ה-inline (בין

יסודות בתכנות

מספרים בינאריים בקוד

איך, ויותר חשוב למה, משתמשים במספרים בינאריים בתכנות? גם בפייתון ובג׳אווהסקריפט?

גלילה לראש העמוד