יום 1 הפקודה Add נתיב רלטיבי \ אבסולוטי

תגיות:

אני יודע שנשאר על זה רבות, ועדין מכל הדיבורים על זה יצאתי מבולבל והייתי שמח לראות אם הבנתי נכון.

מה כן הבנתי:

  1. את התקיה wit צריך לחפש ביחס לנתיב אותו מכניסים לנו ב add, כלומר אם קיבלנו נתיב מלא אז אנחנו נחפש בתקיות האב בו את התקיה wit הראשונה ואליה נגבה.
  2. במידה וניתן לנו נתיב חלקי, אנו בהכרח נקשר אותו לcurrent working directory נקבל נתיב מלא ואז נפעל באותו האופן.

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

אם, בעודנו נמצאים בתיקייה Etztrubal, אנחנו נעשה add ל־ lms/lmsdb – בתיקייה staging_area תווצר התיקייה lms,

כלומר במקרה ואני מקבל פה נתיב חלקי אני יודע בדיוק מאיזה תקיה להתחיל לגבות אל תוך staging_area. כי ה"חלקיות" של הקוד בעצם אומרת לי מאיזה תקיה אני אמור לגבות את הקבצים.

אולם אם מישהו היה מעביר לי נתיב מלא: (ונניח התקיה wit קיימת ב course)

c:\users\loli\course\Etztrubal\lms\lmsdb:

במקרה זה אני לא יכול לדעת איזה קבוצת תקיות אני אמור להעביר לגיבוי:
האם זה lmsdb או החל מ lms האם זה Etzrubal וכו …

בעצם שני המקרים האלה הם שונים בעיניי ולא אקוויטלנטים כפי שמתואר בתשובה של ים בפוסט הנל:

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

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

גם בדוגמא של גילי … איך אני אמור לדעת אם לגבת את util עם הקבצים בה או רק את main.py.
ואם הייתי מוצא את wit בcourse אז איך הייתי יודע לא לגבות את project אלא להישאר רק עם utils.

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

כאשר מדובר בתיקייה לדוגמה
\lms\lmsdb
אז התוכן שתרצה להעביר לגיבוי הוא התוכן החל מהתיקייה lmsdb (כולל כל מבנה התיקיות בדרך עד אליה)

כאשר מדובר בקובץ ספציפי לדוגמה
lms\lmsdbo\pizza.txt
נגבה את רק את הקובץ הספציפי כולל כל שרשור התיקיות עד אליו

כך אני הבנתי

ככה אני הבנתי, אבל זה לא מה שעולה מהתשובה של ים עבור הפוסט של גילי.
כי מה קורה שאתה מקבל את הנתיב המלא של \lms\lmsdb ?
איך אתה יודע לגבות רק את שניהם או את כל התקיות האב עד wit שמצאת.

אם אני מקבל את הנתיב המלא של
lms\lmsdb
אז אני מגבה את התוכן של תיקיית lmsdb תוך כדי שרשור התיקיות עד אליה מהפעם הראשונה שאני נפגש עם תיקיית .wit

עבור הנתיב:

c:\users\loli\course\Etztrubal\lms\lmsdb:

ותקיית wit שנמצאת ב course

מה אתה מגבה ?

Etztrubal\lms\lmsdb
וכל התוכן שבתוך lmsdb

סורי שאני חופר אני באמת לא מצליח לרדת לסוף העניין הזה.

מה עם הקבצים בתוך Etzrubal או Lms … ממה בעצם הבנת בהסבר של התרגיל שאתה לא אמור לגבות את התוכן שלהם גם ?

אם הייתי רוצה לגבות את הקבצים החל מlms:
הייתי רושם כך: Etztrubal\lms
ולא כך: Etztrubal\lms\lmsdb

ואתה לא חופר בכלל, זה מה שאני הבנתי פשוט :slight_smile:

גם אני הבנתי כך אבל זה לא מה שאני מבין מהתשובה בפוסט של גילי. :frowning:

הבנתם נכון.
איפה הפער בין התשובה שלי לגילי לבין התשובה של ניר?

בתשובה שלך לגילי אמרת שבקבלת הנתיב:

C:\Users\Gili\python\course\project\utils\main.py

והמצאות התקיה wit ב project יש לגבות את utils\main.py
כלומר כולל את התקיה utils ולא רק את ההקובץ main.py .

וזה אפילו נהיה לי עוד יותר לא ברור אם במקום קובץ נגיד יש תקיה ולא קובץ.

עץ שנמצא ב־C:\Projects\Yam:

| Etztrubal
├── .wit
│   ├── images
│   └── staging_area
├── dev_requirements.txt
├── Dockerfile
├── LICENSE
├── lms
│   ├── app.py
│   ├── extractors
│   │   ├── base.py
│   │   ├── __init__.py
│   │   ├── notebook.py
│   │   ├── pyfile.py
│   │   └── ziparchive.py
│   ├── __init__.py
│   ├── lmsdb
│   │   ├── bootstrap.py
│   │   ├── database_config.py
│   │   ├── __init__.py
└── └── └── models.py
דוגמה א

נניח שאני נמצא ב־cwd הבאה: C:\Projects

אני יכול לכתוב (יעשו אותו דבר):

  1. python wit.py add Yam/Etztrubal/lms/lmsdb
  2. python wit.py add C:/Projects/Yam/Etztrubal/lms/lmsdb

כך תראה תיקיית staging_area:

├── lms
│   ├── lmsdb
│   │   ├── bootstrap.py
│   │   ├── database_config.py
│   │   ├── __init__.py
└── └── └── models.py
דוגמה ב

נניח שאני נמצא ב־cwd הבאה: C:\Projects\Yam\Etztrubal\lms

אני יכול לכתוב (שניהם יעשו אותו דבר):

  1. python wit.py add lmsdb
  2. python wit.py add C:\Projects\Yam\Etztrubal\lms\lmsdb.

כך תראה תיקיית staging_area:

├── lms
│   ├── lmsdb
│   │   ├── bootstrap.py
│   │   ├── database_config.py
│   │   ├── __init__.py
└── └── └── models.py
2 לייקים

בשתי הדוגמאות אתה מגבה גם את הקבצים שיש בתוך lms או רק את התקיה עצמה ?

רק את התיקייה.

אתה תמיד מגבה את היררכיית התיקיות מהמקום שבו יש את .wit ועד הקובץ/תיקייה שמבקשים ממך לגבות.

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

אתה מגבה את מה שביקשו ממך לגבות, שזה הפרמטר שקיבלת ב־add.
את כולו, את כל הקבצים והתיקיות ותתי הקבצים של מה שקיבלת ב־add.

על הדרך, אתה מגבה גם את התיקיות (רק התיקיות) שנמצאות מעל הנתיב שאתה מגבה, עד (ולא כולל) התיקייה שבה נמצאת תיקיית .wit.

צריך להשתמש בהיגיון כדי להבין למה.
נניח ויש לך את projects שבחרת להפוך לתיקיית wit. אז הלכת לprojects והרצת את python wit.py init ונוצרה שם תיקיית .wit.
בתוך projects יש לך את Projects/exercises/1 ואת Projects/answers/1. נניח שעשינו לשתיהן add.
אם סתם היית מגבה ל־staging_area את 1 ולא את כל ההיררכייה עד אליה, staging_area הייתה כוללת את כל הקבצים מעורבבים משתי התיקיות. זה היה יוצר התנגשות והיה קשה לך לשחזר את צורת התיקייה בעתיד.

סבבה עכשיו אני לגמרי מבין.
מצטער אם קצת שיגעתי בנושא אבל באמת לא היה לי ברור הנושא של גיבוי כל תקיות
האב ללא התוכן שלהם.

תודה לכל העוזרים :heart_eyes:

בדוגמה א, כאשר אתה עומד ב c:\projects אין מעליך תיקיית .wit - לא צריכים לקבל שגיאה?

לא, כיוון שמה שמעניין שם זה הקובץ שהוספת ולא תיקיית העבודה העכשווית, ולכן הבדיקה של האם יש תיקיית .wit למעלה מתייחסת ל־sys.argv[2] ולא ל־cwd

לייק 1

מנסה להבין,
כשאני אכניס את אחד מהנתיבים בדוגמה הראשונה לחיפוש/שורת כתובת, אגיע לתיקיה lmsdb.
לא הבנתי למה צריך לגבות גם את תיקיית האב: lms כמו שהראת בעץ?

הייתי מצפה שהנתיב אחרי הגיבוי יראה:

C:\Projects\Yam\Etztrubal\.wit\staging_area\lmsdb