במאמר הקודם למדנו על התקנה של גיט וקונפיגורציה בסיסית. למדנו גם שגיט עובד באופן זהה על חלונות ועל לינוקס ולפיכך כל הפקודות הן זהות בכל הפלטפורמות.
אנו נפתח תיקיה כלשהי במחשב שלנו שעליה נתאמן. לצורך העניין: temp_project
על מנת שגיט תתחיל לעקוב אחר התיקיה הזו, אנו צריכים ליצור repository חדש. או בקיצור repo. ניכנס לתיקיה ונשתמש בפקודה git init על מנת לאתחל repo. אם הכל תקין, נראה את זה:
$ git init Initialized empty Git repository in /home/ran/temp_project/.git/
מהרגע הזה התיקיה הזו נמצאת תחת מעקב של גיט. שימו לב שאין צורך בשרת מרוחק או בהתקנת שרת מקומי. כל העבודה, בשלב זה, נעשית באופן מקומי. בהמשך נלמד איך עובדים מול שרת.
עכשיו ניצור קובץ בשם index.php שבו, איך לא, יהיה hello.world. אחרי היצירה, אנו נשתמש בפקודת git status כדי לראות אם יש שינויים בין העותק המקומי לבין ממה ששמור ב-git המקומי שלנו. זה מה שנראה:
$ git status On branch master Initial commit Untracked files: (use "git add..." to include in what will be committed) index.php
ועכשיו זה הזמן להסביר את ה-workflow של גיט. בניגוד ל-SVN, בכל דחיפה של קוד יש שני שלבים. השלב הראשון הוא הקומיט שמשמש אותנו לדחיפת קוד מקומית בלבד. ה-push משמש בעצם לדחיפת קוד אל תוך השרת. אנחנו עוסקים כרגע ב-commit מקומי. אז אנו רואים בעצם, באמצעות ה-git status, שיש לנו קובץ אחד שהוא untracked, כלומר ש-git לא עוקבת אחריו. שם הקובץ הוא index.php. בואו ונבקש מגיט להכניס אותו אל ה-repo שלנו. עושים את זה באמצעות פקודת git add שמקבל את שם הקובץ (או pattern, אבל זה סיפור אחר). אחרי שנכתוב git add index.php ונכתוב git status נוכל לראות שב-initial commit יש לנו קובץ חדש ששמו הוא index.php:
$ git add index.php $ git status On branch master Initial commit Changes to be committed: (use "git rm --cached..." to unstage) new file: index.php
אני יכול להוסיף ולעדכן את ה-commit שלי. לעדכן את ה-index.php, להוסיף קבצים חדשים (לא נשכח להוסיף אותם עם git add אחרי יצירתם). אחרי שסיימתי וה-commit שלי מוכן, אני אשתמש בפקודת commit כדי להכניס את כל העבודה שלי אל ה-repo המקומי. הפקודה היא פשוטה מאוד: git commit ואז m- ומרכאות עם המסר שייכנס ללוג. ככה זה נראה:
$ git commit -m "Initial commit" [master (root-commit) afe684e] Initial commit 1 file changed, 3 insertions(+) create mode 100644 index.php
שימו לב לרווח ולמרכאות הכפולות. מהרגע הזה, בעצם סיימתי את עבודתי המקומית. אני יכול להמשיך לעבוד והשינויים שיווצרו ייכנסו לקומיט חדש.
אם אני עורך את index.php ואכתוב שוב git status אני אראה את הפלט הבא:
$ git status On branch master Changes not staged for commit: (use "git add..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: index.php no changes added to commit (use "git add" and/or "git commit -a")
אם ארצה לעשות עוד קומיט, שוב אצטרך לעשות git add עם שם הקובץ (או git add –all לכל הקבצים במידה ויש כמה) ואז git commit עם ההודעה שנכנסת ללוג.
אז איך זה עובד? יצירת ריפו של גיט -> יצירת קבצים -> בחירה מה להכניס לקומיט באמצעות commit add -> קומיט -> המשך עבודה וחוזר חלילה.
במידה ויש לי כמה קומיטים, יש לי כבר לוג שאני יכול להציץ בו:
$ git log commit 228a8c3190429c61c8fde0c77a068ae25d2fed29 Author: Ran Bar-ZikDate: Sat Nov 21 16:42:07 2015 +0200 Change wording commit afe684e746f36320d5aac9db039807051fe8877e Author: Ran Bar-Zik Date: Sat Nov 21 16:34:21 2015 +0200 Initial commit
רואים את המספר הזה שאורכו כאורך הגלות? 228a8c3190429c61c8fde0c77a068ae25d2fed29 למשל? זה נקרא ה-hash וזה המזהה של ה-commit. בדיוק כמו ב-SVN או בכל מערכת אחרת לניהול קבצים. אני יכול להציג את השינויים בין הקומיטים עם diff:
$ git diff 228a8c3190429c61c8fde0c77a068ae25d2fed29 afe684e746f36320d5aac9db039807051fe8877e
לא חייבים להשתמש בכל ה-hash אלא ברוב המקרים אפשר להשתמש רק בחמש ספרות הראשונות. למשל:
$ git diff 228a8 afe68 diff --git a/index.php b/index.php index b495a86..40f1dd2 100644 --- a/index.php +++ b/index.php @@ -1,3 +1,3 @@ <?php -print "Hello World!"; +print "hello world!";
אם עבדתם כבר עם SVN או עם מערכת אחרת לניהול גרסאות, אתם אמורים להכיר את הסינטקס של ה-diff ואפילו כמה כלים גרפיים שעובדים עם גיט בדיוק כמו SVN.
עד כאן, זה לא אמור להיות מאוד שונה מעבודה מול SVN. חוץ מזה שמאוד קל לעבוד באופן מקומי בלבד עם git. בניגוד ל-SVN, ששם אנו היינו חייבים שרת. פה אפשר לעבוד רק במקומי. לעשות קומיטים ולבצע diff. אבל הגדולה של גיט היא בעבודה מול שרת או שרתים מרוחקים. במאמר הבא אנו נלמד על עבודה מול שרת מרוחק.
11 תגובות
לגיט יש איזושהי תוכנה שולחנית לווינדוס?
GUI? אני כמעט בטוח שיש, אבל אני לא מכיר. אם אתה עובד מול גיטהאב, יש להם תוכנה גרפית מצוינת.
אני עובדת עם VS לאחר סנכרון קבצים ב GIT
(את ה- GIT אנו לא מנהלים מ VS)
אני מקבלת שגיאה ש DLLים מסוימים לא מנותבים כראוי
שמנו כבר את הקבצים הבאים ב ignore :
bin, obj, packages
אבל עדין כשעושים PULL/PUSH
זה קורה והאתר זורק שגיאה כי הוא לא מוצא את ה DLL
מה אפשר לעשות?
אני עובדת עם VS לאחר סנכרון קבצים ב GIT
(את ה- GIT אנו לא מנהלים מ VS)
אני מקבלת שגיאה ש DLLים מסוימים לא מנותבים כראוי
שמנו כבר את הקבצים הבאים ב ignore :
bin, obj, packages
אבל עדין כשעושים PULL/PUSH
זה קורה והאתר זורק שגיאה כי הוא לא מוצא את ה DLL
מה אפשר לעשות?
הי, קשה לי לענות על זה כי אני לא מכיר בכלל את VS וגם לא שום דבר מיקרוסופטי. אבל בגדול, הייתי מציע ללכת במסלול הרגיל של 'לחפש בגוגל את התקלה'. מיקרוסופט עובדת יפה מאוד עם גיט בחלק מהפרויקטים שלה וממש לא צריכה להיות שום בעיה כזו.
התקנתי בוינדוס git ורסיה
git version 2.8.4.windows.1
קיבלתי שגיאה
'git commit -m'Initial commit
error: pathspec 'commit" did not match any file(s) known to git.
תיקנתי עם השורה
"git commit -m "Initial commit
כלומר יש רווח אחרי הm ויש מרכאות כפולות
כנראה משהו בחלונות או בגרסה כי אצלי זה לא קורה. אבל תיקנתי ושיניתי כדי שיעבוד לכולם. תודה! 🙂
בשונה משאר המדריכים המצוינים שלך, המדריך הזה כתוב בצורה לא ברורה ולא מדויקת.
אבל מעריך את ההשקעה שלך מאוד בכל אופן!
תודה, המאמר הזה ספציפי בעייתי או כל הסדרה? והאם התחלת לקרוא את הסדרה מההתחלה?
התחלתי מהתחלה ולא עברתי על כל הסדרה. במאמר הזה היה חסר לי קצת בהירות לגבי הגדרות של add ו-commit. אתה קורא לשניהם קומיט, ובמקום אחד במאמר גם נוצר רושם כאילו תמיד צריך לעשות את שתי הפקודות ("אם ארצה לעשות עוד קומיט, שוב אצטרך לעשות git add ")
אני הבנתי לעצמי, ש-add מוסיף את הקובץ לאינדקס של הריפו (אבל זה עדיין לא עוזר לנו כלום באופן מעשי), ו-commit זו הפקודה שיוצרת את הצילום של תמונת מצב העכשווי.
זה טעות ' אם ארצה לעשות שוב קומיט שוב אצטרך לעשות גיט Add..