עבודה עם Git על המחשב האישי
מה זה Git?
Git היא מערכת לניהול גרסאות version control פופולרית מאוד המאפשרת לחזור לגרסאות קודמות של הפרויקט, להשוות ולמיין. ב-Git עובדים מול מאגר repository, בתוכו קבצים ותיקיות.
Git מנהל את המאגר המקומי, שיושב, לרוב, על המחשב האישי.
נהוג ואף רצוי להעלות גרסאות לגיבוי חיצוני בשירות דוגמת github.com. גיבוי חיצוני מומלץ אם רוצים לשתף אנשים נוספים בפרויקט או לצורך מניעת אובדן.
לקריאת המדריך לעבודה עם Git כמאגר מרוחק
אבל לא תמיד צריך / כדאי להעלות את הקבצים לאתר חיצוני, במקום זה אפשר לעבוד עם מאגר Git מקומי.
צעדים ראשונים ב-Git
-
כדי להתקין את Git על המחשב האישי פותחים את הטרמינל, ומקלידים פנימה את הפקודות להורדת והתקנת החבילה:
sudo apt update sudo apt install git
-
מגדירים את Git כולל שם משתמש ומייל:
git config --global user.name "Your Name" git config --global user.email "you@example.com"
-
אם רוצים לעבוד רק עם Git מקומי אז צריך לשקול להסיר כתובות מרוחקת דוגמת GitHub.
איך עושים את זה?
ראשית, בודקים מהו המאגר המרוחק:
git remote -v
ואם באמת צריך אז מוחקים על ידי הרצת הפקודה הבאה:
git remote remove origin
-
-
כדי להתחיל, ניצור תיקייה, ונדלג לתוכה:
mkdir my-project cd my-project
ניצור מאגר Git באמצעות הרצת הפקודה:
git init
-
ברכות! פתחת בהצלחה מאגר מקומי.
-
-
ניצור את הקובץ הראשון של הפרויקט:
echo "Hello local Git" > readme.txt
ונגבה את השינוי שעשינו בפרויקט לתוך מאגר Git מקומי:
git add readme.txt git commit -m "Initial commit"
-
בכל פעם שאתה מגבה באמצעות הפקודה git commit נפתח מאחורי הקלעים commit (הפקדה) חדשה עם האש מזהה ייחודי. ההאש הזה חשוב מאוד. בהמשך נראה אותו בפעולה.
התוצאה:
git commit -m "Initial commit" [master 03dc4ed] Initial commit 1 file changed, 1 insertion(+) create mode 100644 readme.txt
- כוללת את שם הענף ששם ברירת המחדל שלו הוא master (יכול להיות שאצלכם השם שונה).
- הפעולה שנעשתה.
- והאש hash מזהה ייחודי.
-
נערוך שינוי נוסף:
echo "Up and ready to learn Git" >> readme.txt
נעלה את השינוי ל-Git:
git add -A
git commit -m "Added a line about learning Git"
- הפקודה "git add -A" מעלה ל-Git את כל השינויים בפרויקט כולל מחיקות.
- בניגוד ל- "git add ." שמעלה רק מה שבתיקייה הנוכחית ומה שמתחתיה בהיררכיה.
כיצד למנוע הפקדה של קבצים ותיקיות באופן גורף?
הרבה פעמים לא נרצה להפקיד את כל קבצי הפרויקט משני טעמים:
-
ישנם קבצים ותיקיות שאנחנו רוצים להגן עליהם משאר העולם. לדוגמה, פרטי גישה למסד הנתונים. נכון שאנחנו עובדים מקומית אבל צריך כבר לחשוב קדימה על היום שבו נרצה להעלות גיבוי לשירות Git בענן.
-
קבצים גנריים שלא כדאי להפקיד מטעמים של חיסכון בזכרון. לדוגמה, כל הספריות של הפרויקט (דוגמת תיקיית venv כשעובדים עם סביבה וירטואלית של פייתון).
כדי למנוע העלאת הקבצים, צריך להוסיף לתיקיית השורש של הפרויקט קובץ .gitignore, ששמו כמקובל אצל קבצי קונפיגורציה מתחיל בנקודה, ובתוכו לציין את שמות הקבצים והתיקיות אותם לא מעוניינים להפקיד למאגר Git.
לדוגמה:
.gitignore
node_modules/
venv/
lib/
database_credentials.py
settings.py
secret.py
*.log
*.conf
ניתן לראות בדוגמה כיצד למנוע העלאת תיקייה או קובץ, אבל גם כיצד למנוע העלאת קבצים מסוג מסוים באמצעות ציון ההרחבה אחרי כוכבית נקודה, לדוגמה, כדי למנוע את העלאת כל הקבצים בעלי הרחבת "conf" נשתמש ב: `*.conf`
git status - הפקודה שאומרת לך מה מצב המאגר
git status
הפקודה git status מראה אילו קבצים שונו בתיקייה שלך - האם הם חדשים, שונו, או נמחקו - והאם הם מוכנים ל-commit או לא.
- קבצים שלא נוספו עם git add יופיעו באדום (unstaged).
- קבצים שכן נוספו יופיעו בירוק (staged).
git log - הפקודה שמלמדת אותך על היסטוריית ההפקדות
הפקודה:
git log
מציגה מידע על כל commit כולל מידע, דוגמת: תאריך, בעלים, המסר (message) ומזהה ההפקדה hash
ניתן לקבל תוצאה יותר קריאה על ידי הרצת הפקודה:
git log --oneline --graph --all
התוצאה:
* 7f072bb (HEAD -> master) Added a line about learning Git
* 03dc4ed Initial commit
הרצת הפקודה מציגה את כל ההיסטוריה של ההפקדות. נשתמש בזה יותר מאוחר כדי להשוות בין גרסאות ולצורך שחזור.
git diff - הפקודה שאומרת לך "מה נשתנה"
הפקודה:
git diff
או:
git diff --staged
ניתן להשוות בין כל שתי גרסאות גם כן באמצעות git diff:
git diff [commit1] [commit2]
לדוגמה:
$ git diff 7f072bb 03dc4ed
התוצאה:
diff --git a/readme.txt b/readme.txt
index 0b08f42..1e10f12 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1 @@
Hello local Git
-Up and ready to learn Git
- בדוגמה לעיל אפשר לראות מה נוסף או נמחק (ותלוי בקונפיגורציה התוצאות מתקבלות בצבע).
git checkout מכונת הזמן לשירותך
כדי לצפות בהפקדה ישנה בלי לבלגן את הפרויקט הנוכחי:
git checkout [commit-hash]
- מה שיגרום למצב "detached HEAD" המאפשר קריאה בלבד
- נסה לבלות במצב זה מעט ככל שאפשר כי כל שינוי שתעשה יהיה בהמתנה.
כשאתה מסיים לבחון את הקבצים בהפקדה חזור לענף הראשי על ידי:
git checkout master
כדי לחזור לענף העיקרי (תיקיית העבודה שלך)
ניתן להשתמש ב-git checkout לאחזור קובץ לענף הנוכחי:
git checkout [commit-hash]
לדוגמה, אחזור של קובץ אחד ספציפי:
git checkout 7f072bb -- ./readme.txt
ניתן להחזיר את המאגר כולו להפקדה מוקדמת יותר באופן השומר את השינויים (soft reset):
git reset --soft [commit-hash]
או באופן הגורם למחיקת הגרסה הנוכחית (hard reset):
git reset --hard [commit-hash]
- עם הפקודה הזו צריך להזהר! לנשום כמה נשימות, להתהלך, לשתות כוס מים, ורק אז…
soft reset שומר על הקבצים בתיקיית העבודה ומשאיר את השינויים מוכנים להפקדה, ואילו hard reset מחזיר את הכל אחורה כולל מחיקת השינויים בתיקייה.
בקצרה
- השתמש ב git log למציאת הפקדות קודמות.
- השתמש ב git diff כדי לבדוק מה השתנה בין הפקדות או בתוך תיקיית העבודה.
- השתמש ב git checkout כדי להציץ להפקדות מוקדמות יותר או לאחזור קבצים.
עבודה עם ענפים - git branch, git switch, git merge
ב-Git ניתן לעבוד על כמה גרסאות של אותו פרויקט במקביל. לדוגמה, ליצור ענף (branch) חדש כדי לפתח פיצ’ר מסוים בלי לגעת בקוד הראשי, ואחר כך למזג בין הענפים אם רוצים.
יוצרים ענף branch חדש. לדוגמה:
git branch feature-x
- נוצר ענף חדש בשם "feature-x" על בסיס ההפקדה הנוכחית
עוברים לענף:
git switch feature-x
או:
git checkout feature-x
- הפקודה switch חדשה וברורה יותר, אך checkout עדיין בשימוש נרחב
עוברים בחזרה לענף הראשי:
git switch master
מיזוג בין ענפים - merge:
נניח שסיימת לפתח את feature-x ואתה רוצה למזג אותו לענף הראשי:
git switch master
git merge feature-x
- אם אין קונפליקטים, השינויים יתמזגו.
- אם יש קונפליקט Git יבקש ממך לתקן ידנית.
הפקודה הבאה תאפשר לך לצפות בכל הענפים:
git branch
עבודה עם תגיות - git tag
תגית (tag) היא כמו סימניה או נקודת ציון בהיסטוריה של המאגר. לדוגמה: גרסה 1.0 של התוכנה.
יצירת תגית. לדוגמה:
git tag v1.0
או תגית עם תיאור:
git tag -a v1.0 -m "First stable release"
לצפייה בכל התגיות:
git tag
להצצה לקוד בתגית:
git checkout v1.0
- זהירות! אתה שוב נכנס ל־ detached HEAD
איך משחזרים או מבטלים טעויות?
אפשר לשחזר קובץ אחד מסויים לגרסה האחרונה מתוך המאגר. לדוגמה:
git restore readme.txt
הקובץ ישוחזר מ־HEAD מה שאומר ההפקדה האחרונה.
אפשר גם לשחזר קובץ מגרסה מסוימת אם מציינים את ההאש של ההפקדה:
git restore --source [commit-hash] readme.txt
ביטול הפקדה - git revert
אם עשית commit ואתה רוצה לבטל את השינויים מבלי למחוק את ההיסטוריה:
git revert [commit-hash]
Git ייצור הפקדה חדשה עם הפעולה ההפוכה דבר המונע שגיאות ומספק שקיפות.
ביטול שינויים בקבצים שלא הופקדו עם commit
git restore .
- מחזיר את כל הקבצים בתיקייה הנוכחית לגרסה האחרונה
נסכם
- branch, switch, merge: ניהול פיתוח מקביל.
- tag: סימון גרסאות חשובות.
- restore: שחזור קבצים.
- revert: ביטול הפקדות מבלי לשבור היסטוריה.
מדריכים נוספים שעשויים לעניין אותך
git ו- github: עבודה עם ענפים וכיצד לחזור לגרסאות קודמות?
git ו-github: כיצד ניתן להוסיף ענפים ולמזג גרסאות?
זה IDE? זה עורך קוד? זה VSCODE!
לכל המדריכים בסדרת כישורי מחשב באתר רשתטק
אהבתם? לא אהבתם? דרגו!
0 הצבעות, ממוצע 0 מתוך 5 כוכבים
המדריכים באתר עוסקים בנושאי תכנות ופיתוח אישי. הקוד שמוצג משמש להדגמה ולצרכי לימוד. התוכן והקוד המוצגים באתר נבדקו בקפידה ונמצאו תקינים. אבל ייתכן ששימוש במערכות שונות, דוגמת דפדפן או מערכת הפעלה שונה ולאור השינויים הטכנולוגיים התכופים בעולם שבו אנו חיים יגרום לתוצאות שונות מהמצופה. בכל מקרה, אין בעל האתר נושא באחריות לכל שיבוש או שימוש לא אחראי בתכנים הלימודיים באתר.
למרות האמור לעיל, ומתוך רצון טוב, אם נתקלת בקשיים ביישום הקוד באתר מפאת מה שנראה לך כשגיאה או כחוסר עקביות נא להשאיר תגובה עם פירוט הבעיה באזור התגובות בתחתית המדריכים. זה יכול לעזור למשתמשים אחרים שנתקלו באותה בעיה ואם אני רואה שהבעיה עקרונית אני עשוי לערוך התאמה במדריך או להסיר אותו כדי להימנע מהטעיית הציבור.
שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.
המשתמש באתר צריך להיות מודע לכך שאם וכאשר הוא מפתח קוד בשביל פרויקט הוא חייב לשים לב ולהשתמש בסביבת הפיתוח המתאימה ביותר, הבטוחה ביותר, היעילה ביותר וכמובן שהוא צריך לבדוק את הקוד בהיבטים של יעילות ואבטחה. מי אמר שלהיות מפתח זו עבודה קלה ?
השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.