מוודאת שהבנתי נכון,
בנתיב שקיבלנו נחפש תיקיית wit. ואם לא נמצא נחפש את תיקיית wit. בCWD?
אבל אז מה בעצם נגבה?
מסתבכת ממש עם הבנת התרגיל…
זה בסדר, זה חומר חדש ואפשר לשאול עד שמבינים.
נקרא שוב את ההנחייה:
בקצרה: כל פעם שנבצע את פעולת add על קובץ, נחפש את תיקיית העל הקרובה ביותר בה יש קובץ
.wit
, וממנה נגזור את הנתיב היחסי לקובץ שעליו התבצעה הפקודהadd
. בתוך תיקייתstaging_area
ניצור שכפול של התיקייה המקורית עבור כל הקבצים שעליהם עשינו add.
אם עשינו add על תיקייה, נצרף ל־.wit
על כל הקבצים שבתיקייה, ועל כל הקבצים שבתתי התיקיות וכן הלאה.אם אין תיקיית
.wit
באף תיקיית־על, זרקו שגיאה מתאימה.
יש 2 אפשרויות לצורת הנתיב בפרמטר של פקודת add:
- נתיב אבסולוטי. (C:\Users\Gili\python\course\project\utils\main.py)
- נתיב רלטיבי (תמיד רלטיבי ל־current working directory – נניח שאנחנו בתיקיית project, אז: utils\main.py)
שני הקלטים האלו אקוויולנטיים וירוצו בדיוק באותה צורה.
את צריכה לבדוק האם יש תיקיית .wit
ב־utils
.
אם אין, את צריכה לבדוק האם יש כזו ב־projects
, ואז, אם אין, ב־course
, ואז, אם אין, ב־python
, ואז ב־Gili
ואז ב־Users
ואז ב־C
.
אם אין – זורקים שגיאה.
אם יש – נניח ב־project, את צריכה להוסיף ל־staging_area את utils\main.py
.
ממה שאני הבנתי יש שני דברים שקורים.
מציאת .wit - שבעצם קורה באופן הבא: הוא מקבל את הcurrent working directory ומתחיל לחפש בו איפה יש .wit (בכל תקיות האב)
אחרי שמצאתי שיש wit - אני לוקח את הנתיב שנכנס אל add שהוא בהכרח רלטיבי ל CWD
ומעתיק את כולו לתקיה של stage. במיקום שמצאנו של .wit
השאלת הבהרה שלי: אני לא מבין איך בחלק השני אני יכול לקבל נתיב מלא… כי נתיב מלא אומר בעצם שאני אמור להעתיק את כל הנתיב אם התתי תקיות שלו ל stage.
בדוגמא:
lms/lmsdb
בעצם אני הולך ל lms ומשם פנימה מעתיק את הכל.
אז אם מישהו הכניס לי נתיב מלא:
c:\Aviad\lms/lmsdb
אני אמור ללכת עד ל c ומשם להעתיק את הכל כי אני לא יודע אם לקחת מ lms או מ Aviad או בכלל מ c לצורך העניין.
מרגיש לי שיש משהו שאני מפספס מהתשובה שלך
זה לא מדויק – אנחנו מנסים למצוא את תיקיית .wit
בפקודת add
לפי הנתיב שהוזן כפרמטר, לא לפי ה־current working directory.
תחשבו שה־current working direcotry עד התרגיל של add (כולל) משמשת אתכם רק ב־2 מקרים:
- בפקודה init – ה־cwd היא התיקייה שאותה אנחנו רוצים לגבות
- כדי “לנרמל” נתיב שהתקבל כפרמטר מנתיב רלטיבי (lms/moshe.py) לנתיב אבסולוטי (C:/projects/lms/moshe.py)
אז בעצם במידה ואני מקבל נתיב רלטיבי אני מחבר אליו את הנתיב של cwd ובמידה ולא אני מתייחס לכל הנתיב שניתן לי ומחפש שם.
ואיך נדע בעצם שהנתיב הוא רלטיבי
לנתיב מלא יש דפוס ברור אפשר לנסות לבדוק אם הוא קיים או לא.
מה שכן אולי יש כבר פונקציות שעושות את זה
כן
וַיֹּאמֶר אֲלֵהֶם יָם הֲלוֹא לְגוּגֶל פִּתְרֹנִים סַפְּרוּ נָא לִי
זה מחזיר אותי לשאלה של: אם אני מקבל נתיב מלא.
איך אני יודע מאיפה לגזור אותו לטובת הגיבוי, או שמא אני גוזר אותו מתקיית האב הראשון למשל c:
אתה מתחיל מהנתיב המלא ועולה תיקייה תיקייה עד שאתה מגיע לתיקייה עם .wit