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

תגיות:

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

מה עם הקבצים בתוך 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

בגדול מה שקורה זה שאת מגבה את התקייה שאת מקבלת בנתיב (את זו שבקצה)
ואת מכניס לstage את השרשור תקיות ממנה עד לתקיה .wit.

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

2 לייקים

מהתשובה של ים השתמע לי שהנתיב אחרי גיבוי יראה כך

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

ולא

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

לייק 1

כיוון שהתיקייה .wit נמצאת ב־Etztrubal, ואנחנו גוזרים את כל היררכיית התיקיות את התיקייה שאותה אנחנו רוצים לגבות.

תחשבי שבעץ שלנו, תחת Etztrubal הייתה גם התיקייה lms/lmsdb וגם התיקייה moshe/lmsdb, והיינו מגבים את שניהם. היה יוצא לנו סלט של קבצים משתי התיקיות.
יותר גרוע – אם היה לנו קובץ בשם main.py בשניהם, לדוגמה, האחד היה דורס את השני.

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

סיבה נוספת: אחר כך, כשנעשה checkout כדי לחזור ל־image מסוים (לשחזר גיבוי), נוכל לקבל בקלות את הצורה המקורית של התיקייה שגיבינו.

לייק 1

לגבי הנתיב שצריך לגבות, אני מבינה שצריך את הנתיב האבסולוטי ולא רק את השם של הקובץ או התיקייה.
השאלה שלי היא לגבי הנתיב שנוצר אחרי הגיבוי.

עורכת:
צריך בתיקיית היעד(wit\staging_area.) ליצור את כל התיקיות בין שורש תיקיית הגיבוי עד למה שהתבקשנו לגבות ע"מ שכשנצטרך לשחזר בעתיד, נדע בדיוק לאן לשחזר. (חוץ מזה שזה מונע דריסה של קבצים שונים עם שם זהה שמקורם בתיקיות שונות)

ב-STAGING_AREA…
גם את הקבצים הקיימים - מבחינת שם? או גם תוכן (פעם ראשונה)?

כלומר -
├── lms
│ ├── lmsdb
│ │ ├── bootstrap.py
│ │ ├── database_config.py
│ │ ├── init.py
└── └── └── models.py
כל ה-.py מועתקים? או רק נוצרים?

ל-image בהמשך אני מבין שמועתקים.

בadd מעתיקים כולל תוכן, את כל מה שקיבלת בפרמטר לadd. כלומר, קובץ/ תיקייה כולל כל מה שבתוכו.
בשביל ההיררכיה של התיקיות,
מתיקיית השורש, אתה יוצר תיקייה בתוך תיקייה שמכילות רק את התיקייה הבאה בהיררכיה עד הקובץ/התיקייה המדוברת שכוללת את כל התוכן.