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).
אחרי שבחנו את השינויים, אנחנו יכולים להעלות את הגרסה עם 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 למספר משתמשים.