הנתיב בפרמטר לפקודת add

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

זה בסדר, זה חומר חדש ואפשר לשאול עד שמבינים.
נקרא שוב את ההנחייה:

בקצרה: כל פעם שנבצע את פעולת add על קובץ, נחפש את תיקיית העל הקרובה ביותר בה יש קובץ .wit , וממנה נגזור את הנתיב היחסי לקובץ שעליו התבצעה הפקודה add . בתוך תיקיית staging_area ניצור שכפול של התיקייה המקורית עבור כל הקבצים שעליהם עשינו add.
אם עשינו add על תיקייה, נצרף ל־ .wit על כל הקבצים שבתיקייה, ועל כל הקבצים שבתתי התיקיות וכן הלאה.

אם אין תיקיית .wit באף תיקיית־על, זרקו שגיאה מתאימה.

יש 2 אפשרויות לצורת הנתיב בפרמטר של פקודת add:

  1. נתיב אבסולוטי. (C:\Users\Gili\python\course\project\utils\main.py)
  2. נתיב רלטיבי (תמיד רלטיבי ל־current working directory – נניח שאנחנו בתיקיית project, אז: utils\main.py)

שני הקלטים האלו אקוויולנטיים וירוצו בדיוק באותה צורה.

את צריכה לבדוק האם יש תיקיית .wit ב־utils.
אם אין, את צריכה לבדוק האם יש כזו ב־projects, ואז, אם אין, ב־course, ואז, אם אין, ב־python, ואז ב־Gili ואז ב־Users ואז ב־C.

אם אין – זורקים שגיאה.
אם יש – נניח ב־project, את צריכה להוסיף ל־staging_area את utils\main.py.

3 לייקים

ממה שאני הבנתי יש שני דברים שקורים.
מציאת .wit - שבעצם קורה באופן הבא: הוא מקבל את הcurrent working directory ומתחיל לחפש בו איפה יש .wit (בכל תקיות האב)

אחרי שמצאתי שיש wit - אני לוקח את הנתיב שנכנס אל add שהוא בהכרח רלטיבי ל CWD
ומעתיק את כולו לתקיה של stage. במיקום שמצאנו של .wit

השאלת הבהרה שלי: אני לא מבין איך בחלק השני אני יכול לקבל נתיב מלא… כי נתיב מלא אומר בעצם שאני אמור להעתיק את כל הנתיב אם התתי תקיות שלו ל stage.

בדוגמא:

lms/lmsdb

בעצם אני הולך ל lms ומשם פנימה מעתיק את הכל.
אז אם מישהו הכניס לי נתיב מלא:

c:\Aviad\lms/lmsdb

אני אמור ללכת עד ל c ומשם להעתיק את הכל כי אני לא יודע אם לקחת מ lms או מ Aviad או בכלל מ c לצורך העניין.

מרגיש לי שיש משהו שאני מפספס מהתשובה שלך :frowning:

זה לא מדויק – אנחנו מנסים למצוא את תיקיית .wit בפקודת add לפי הנתיב שהוזן כפרמטר, לא לפי ה־current working directory.
תחשבו שה־current working direcotry עד התרגיל של add (כולל) משמשת אתכם רק ב־2 מקרים:

  1. בפקודה init – ה־cwd היא התיקייה שאותה אנחנו רוצים לגבות
  2. כדי “לנרמל” נתיב שהתקבל כפרמטר מנתיב רלטיבי (lms/moshe.py) לנתיב אבסולוטי (C:/projects/lms/moshe.py)
לייק 1

אז בעצם במידה ואני מקבל נתיב רלטיבי אני מחבר אליו את הנתיב של cwd ובמידה ולא אני מתייחס לכל הנתיב שניתן לי ומחפש שם.

לייק 1

ואיך נדע בעצם שהנתיב הוא רלטיבי

לייק 1

לנתיב מלא יש דפוס ברור אפשר לנסות לבדוק אם הוא קיים או לא.
מה שכן אולי יש כבר פונקציות שעושות את זה :slight_smile:

כן

וַיֹּאמֶר אֲלֵהֶם יָם הֲלוֹא לְגוּגֶל פִּתְרֹנִים סַפְּרוּ נָא לִי :stuck_out_tongue:

3 לייקים

זה מחזיר אותי לשאלה של: אם אני מקבל נתיב מלא.
איך אני יודע מאיפה לגזור אותו לטובת הגיבוי, או שמא אני גוזר אותו מתקיית האב הראשון למשל c:

אתה מתחיל מהנתיב המלא ועולה תיקייה תיקייה עד שאתה מגיע לתיקייה עם .wit