الدرس 4 · الأساسيات
أنشئ مستودع الدورة وميّز بين استنساخه وفتحه
أنشئ GitTree Features من صفحة علامة التبويب الجديدة، وتحقّق من أن سجله لا يحتوي إيداعات بعد. ثم استنسخه محليًا إلى مجلد منفصل لتفصل بين إنشاء التاريخ ونسخه وفتح مستودع موجود.
- المستوى: مبتدئ
- قراءة 12 دقيقة
- فيديو 6 دقائق
- آخر تحديث
- قبل هذا الدرس: ثبّت Git وعاين هوية الإيداع بأمان, توقّع ما سيحفظه إيداعك المقبل
حُفظ التقدّم في هذا المتصفح.
يحمّل التشغيل الفيديو من YouTube (وضع الخصوصية المحسّنة).
ما الذي ستتعلمه
- تهيئة أول مستودع للدورة داخل GitTree مع اختيار main صراحةً.
- فهم وجود اسم فرع دون أول إيداع.
- حفظ الهوية الخيالية في مستودع الدورة وحده.
- استنساخ المستودع الفارغ نفسه إلى مجلد منفصل وفحص origin.
- إعادة فتح الأصل دون نسخه أو إنشاء إيداع.
قبل البدء
ابدأ من حيث انتهى الدرسان الثاني والثالث: يعمل Git، ولا يوجد مستودع للدورة بعد. عاينّا الهوية في الدرس الثاني ولم نحفظها عالميًا. اختر مجلدًا أبًا موجودًا وقابلًا للكتابة، مخصصًا للدورة. يجب أن يكون مجلد gittree-features الفرعي جديدًا أو فارغًا، وخارج مستودعات المصدر القائمة. لا تهيّئ المشروع داخل مستودع الويب هذا أو عملك الشخصي.
الحد الأدنى المقروء لـ GitTree هو Git 2.39.0. سُجّلت الأوامر واللقطات في الفيديو باستخدام Git 2.52.0 وGitTree 2.0 على Ubuntu 24.04 داخل مجلد منزل خاص، وجرت الفحوص في هذا الدرس على المستودعات التي أنشأها التسجيل. لم تُنفَّذ على macOS أو Windows. تستخدم الاختصارات Command على macOS وCtrl على Windows وLinux، ويختلف شكل نافذة اختيار المجلدات في النظام من نظام إلى آخر ولم نصوّرها.
بعد تسجيل الدخول إلى GitTree لا تحتاج هذه العمليات المحلية إلى تكامل مضيف أو Pro أو تجربة: تشملها الخطة المجانية. نستخدم عنوان file:// على الجهاز نفسه، لا GitLab مستضافًا ولا مفتاح Claude.
الفكرة
التهيئة تنشئ بيانات مستودع Git في مجلد تختاره، لكنها لا تنشئ إيداعًا لمجرد ظهور اسم الفرع. للمستودع العادي مجلد عمل وفهرس خالٍ في البداية. يمكن أن يشير HEAD رمزيًا إلى refs/heads/main قبل وجود إيداع عند طرف ذلك الفرع.
الاستنساخ ينشئ مستودعًا منفصلًا من مصدر. في الحالة المعتادة ينسخ التاريخ المتاح ويستخرج الفرع المختار، ويضبط بعيدًا يسمى origin. مصدرنا هنا فارغ عمدًا، فلا يوجد تاريخ أو ملفات عمل لينسخها. هذه حالة صحيحة وليست فشل رفع.
الفتح يختار مستودعًا قائمًا لفحصه في GitTree. فتح علامة تبويب لا ينسخ ملفاته ولا ينشئ إيداعًا ولا يربطه تلقائيًا بمضيف. قد يحفظ التطبيق بيانات حديثة أو مساحة عمل ويفحص الثقة بصورة مستقلة.
شبّه الأفعال بإنشاء دفتر جديد، ونسخة منفصلة منه، ووضع دفتر موجود أمامك. لكن التشبيه لا يحدد الصلاحيات: قد تشغّل إعدادات المستودع أو خطّافاته برامج، ولذلك توجد مراجعة ثقة.
| الإجراء | مجلد العمل والفهرس | المراجع المحلية | الإعدادات والمراجع البعيدة |
|---|---|---|---|
| تهيئة الأصل على main | مجلد عادي دون ملفات مشروع أو مداخل فهرس | HEAD رمزي إلى main دون طرف إيداع | لا بعيد |
| حفظ هوية محلية | لا تغيير في ملفات العمل أو محتوى الفهرس | لا تغيير في المراجع | كتابة user.name وuser.email في إعداد الأصل وحده |
| استنساخ إلى مجلد آخر | مجلد وفهرس جديدان خاليان | لا إيداعات | origin في النسخة يشير إلى الأصل؛ لا طرف فرع تتبّع بعيد بعد |
| إعادة فتح الأصل | اختيار الأصل دون تكرار ملفاته | لا إنشاء مراجع أو إيداع | يبقى الأصل دون بعيد |
المستودع المجرّد يحفظ التاريخ دون ملفات عمل عادية، وله استخدام لاحق في سيناريوهات الخادم؛ ليس مناسبًا لبناء صفحة الدورة. اختيار قالب تجاهل أو ترخيص سيضيف ملفات غير مُودَعة، لذا نرفض القوالب هنا.
راجع مرجع التهيئة ومرجع الاستنساخ. يفرض التطبيق شروطًا على المجلد الوجهة أشد من قدرة Git الأصلي على إعادة التهيئة؛ لا تستخدم الطرفية لتجاوز رفض يحمي محتوى قائمًا دون فهمه.
في GitTree — أول تهيئة فعلية
الأسماء الدقيقة في المصدر الحالي: بطاقة تهيئة (Init)، ثم نافذة تهيئة مستودع (Initialize a repository)، وزر تهيئة (Initialize). الصياغة القديمة “Init a repository” كانت وصفًا للإجراء لا نص زر حالي.
- افتح علامة تبويب جديدة (New Tab) بـ Command+T أو Ctrl+T (
tab.new). تظهر بطاقات فتح (Open) واستنساخ (Clone) وتهيئة. - اختر تهيئة (Init). تظهر تهيئة مستودع (Initialize a repository) دون كتابة قبل الإرسال. البديل: لوحة الأوامر… (Command Palette…) بـ Command+Shift+P أو Ctrl+Shift+P → تهيئة مستودع… (Initialize Repository…،
repo.init). لا نفترض اختصارًا مباشرًا آخر للتهيئة. - في الموقع (Location) أدخل المسار الكامل إلى
gittree-featuresتحت المجلد الأب المخصص. أو استخدم استعراض… (Browse…) ثم منتقي النظام بعنوان اختر مكان إنشاء المستودع (Choose where to create the repository). لا نفترض أسماء أزرار النظام؛ افحص قيمة الموقع النهائية. - اكتب
mainفي الفرع الأولي (Initial branch). أبقِ مستودع مجرّد (السجل فقط، بلا ملفات عمل) غير محدد. - اجعل قالب .gitignore (.gitignore template) والترخيص (Licence) على بلا (None) حين تُحمَّل عناصر القوالب. الافتراضي دون اختيار؛ لا تضف ملفات يدويًا إذا لم تظهر العناصر. أبقِ الفتح بعد الإنشاء (Open after creating) مفعّلًا.
- راجع المسار والفرع وإيقاف المجرّد ورفض القوالب، ثم اختر تهيئة (Initialize) مرة واحدة. يُنشأ المستودع ويفتح، وربما يمر بمراجعة الثقة المعتادة. لا تكرر الإرسال أثناء الانتظار.
- إذا ظهرت الوثوق بهذا المستودع؟ (Trust this repository?) فافحص المسار والنتائج الفعلية. إلغاء (Cancel) يتركه مغلقًا، وفتح في الوضع المقيَّد (Open in Restricted Mode) يحد الإجراءات، والوثوق والفتح (Trust and Open) يسمح بالإعدادات والخطّافات المعتادة. اختر الأخير لهذا المشروع الذي أنشأته فقط بعد فهم النتائج؛ لم تظهر نافذة الثقة في التسجيل للمجلد الجديد؛ فلا تتوقعها مع كل مستودع جديد.
- تأكد من أن علامة التبويب تخص الأصل
gittree-features، لا الأب أو النسخة. يبقى الرسم دون إيداع؛ لا تنشئ إيداعًا زائدًا لإخفاء الحالة الخالية.
حفظ الهوية في المستودع وحده
- مع نشاط الأصل افتح التفضيلات (Preferences)، Command+, أو Ctrl+, (
app.preferences.open). - في قسم المستودعات اختر gittree-features. هذا اسم ديناميكي، لا صفحة ملفات التعريف العامة. في منتقي الصفحات الضيق يكون النص خاصة بالمستودع: gittree-features.
- عند الاسم في الإيداعات (Name for commits) (
repo.userName، والمفتاح الأصليuser.name) افحص يكتب في (Writes to) واختر محلي (هذا المستودع)، لا عام (كل المستودعات). - اكتب
GitTree Demoثم تطبيق (Apply)، أو اضغط Enter في الحقل. انتظر حالة الحفظ قبل المتابعة. - كرّر ذلك عند البريد الإلكتروني في الإيداعات (Email for commits) (
repo.userEmail، والمفتاحuser.email) بالقيمةdemo@example.comوعلى المستوى المحلي نفسه. طبّق وانتظر. - اختر الخروج من التفضيلات (Exit Preferences). يبقى المستودع الأصلي نشطًا وسجله خاليًا؛ تغير إعداد الهوية لا ملفات العمل أو الرسم.
الكتابة وحدها مسودة. يلغِي Escape في حقل معدّل تلك المسودة أولًا، وليس اختصارًا مضمونًا للخروج من كل شيء. اختيار النطاق ثم التطبيق هو الفرق عن معاينة الدرس الثاني الملغاة.
في الطرفية — إثبات نتيجة التطبيق
استبدل <course-parent> بمسار الأب المطلق المخصص لك، وأبقِ الاقتباس حول المسارات. نفّذ بعد التهيئة داخل التطبيق، لا في مستودع الويب:
cd "<course-parent>/gittree-features"
git rev-parse --is-inside-work-tree
git rev-parse --is-bare-repository
git symbolic-ref --short HEADالنتائج المرصودة بالترتيب:
true
false
mainتحقّق من غياب الإيداع:
git rev-parse --verify --quiet HEADلا يطبع شيئًا على أي من قناتي الناتج، ويخرج بالحالة 1. هذه نتيجة الفرع دون إيداع، لا تشخيص فساد. يجيب HEAD الرمزي والتحقّق من المراجعة عن سؤالين مختلفين.
افحص حالة الملفات والفهرس وأسماء المراجع البعيدة:
git status --short
git ls-files
git remoteكل أمر خرج بالحالة 0 دون ناتج في نسخة الفحص. لا يثبت ذلك وحده غياب كل ملف مُتجاهَل. افتح المجلد المخصص في مدير الملفات مع إظهار العناصر المخفية: ينبغي أن توجد بيانات .git دون ملفات مشروع. لا تحرّر محتويات .git.
اقرأ حقلي الهوية المحليين فقط:
git config --local --get user.name
git config --local --get user.emailالناتج:
GitTree Demo
demo@example.comلا نحتاج إلى عرض إعدادات شخصية أو عامة.
البديل الأصلي — لا بداية ثانية للمشروع
لنسخة مقارنة مؤقتة منفصلة، أو لمن يدرس Git دون التطبيق:
cd "<course-parent>"
git init --quiet --initial-branch=main --template= gittree-featuresخرج الأمر بالحالة 0 دون ناتج في الفحص المعزول. لا تعِد تنفيذه على الأصل المنشأ داخل GitTree. خيار قالب Git الفارغ يختلف عن قائمتَي تجاهل الملفات والترخيص في التطبيق. تبقى القوالب والإعدادات الموروثة على جهازك بحاجة إلى مراجعة.
إذا استخدمت الطرفية بدل صف الهوية في التطبيق، اختر المستودع الجديد أولًا ثم اكتب محليًا عمدًا:
cd "<course-parent>/gittree-features"
git config --local user.name "GitTree Demo"
git config --local user.email demo@example.comكانت الكتابتان ناجحتين دون ناتج في الفحص. هما بديل عن خطوة التطبيق، لا دليل على أن تسجيل التطبيق نُفّذ.
استنساخ نسخة محلية منفصلة
نستخدم المشروع نفسه، لا تطبيقًا تجريبيًا آخر. يبقى الأصل نقطة استمرار الدورة ويجب العودة إليه قبل الدرس الخامس. هذه الخطوة لا تضيف بعيدًا إلى الأصل.
في GitTree
- افتح علامة تبويب جديدة ثم استنساخ (Clone). البديل في لوحة الأوامر استنساخ مستودع… (Clone Repository…،
repo.clone). تظهر نافذة استنساخ مستودع (Clone Repository). - اختر الاستنساخ عبر URL. في عنوان URL للمستودع أدخل عنوان الأصل المطلق، مثل
file:///absolute/course-parent/gittree-featuresبعد استبداله بمسارك الفعلي. يقبل محلل التطبيق عنوان file مطلقًا لا مسارًا خامًا. استخدم مسارًا بسيطًا دون مسافات في أول تدريب؛ لترميز URL وصيغة محركات Windows فحص منفصل. - اختر الأب الموجود في المجلد الأصل، واكتب
gittree-features-copyصراحةً في اسم المجلد. افحص يُستنسخ إلى؛ يجب أن يشير إلى النسخة لا الأصل. - اترك العمق فارغًا للتاريخ الكامل، وأبقِ استنساخ الوحدات الفرعية أيضًا واستخراج جزئي: ملفات المستوى الأعلى فقط في البداية، ثم المجلدات التي تختارها وتنزيل محتوى الملفات عند الحاجة إليه فقط (blobless) معطلة. أبقِ الفتح بعد الاستنساخ مفعّلًا؛ لا تختَر خيارات متقدمة هنا.
- اختر استنساخ (Clone) مرة واحدة. يظهر تقدم فعلي أو اكتمال سريع للمصدر الخالي، ثم تُفتح النسخة عبر مراجعة الثقة عند الحاجة. لا نشترط ظهور كل مرحلة تقدم لعملية صغيرة كهذه.
- افحص الرسم الخالي واستعلامات الطرفية الآتية. يخص
originالنسخة ويشير إلى الأصل. ضبط بعيد لا يعني وجود طرف فرع تتبّع بعيد أو منصة استضافة. - عد إلى الأصل عبر فتح (Open) من علامة جديدة أو فتح مستودع… (Open Repository…،
repo.open)، Command+O أو Ctrl+O، ثم اختر مجلد الأصل وراجع الثقة عند الحاجة. استخدم التسجيل بدلًا من ذلك زر فتح في صف الأصل ضمن الأخيرة في علامة التبويب الجديدة، وفتحه بالطريقة نفسها؛ ولم نصوّر نافذة اختيار المجلدات. البديل إسقاط مجلد الأصل على سطح إسقاط المجلد في علامة التبويب الجديدة (لم يُصوَّر). لا نفترض هل يعيد الإصدار استخدام تبويب أو ينشئ آخر. - اترك النسخة الإضافية دون تعديل؛ لا يلزم حذفها. تأكد من غياب البعيد في الأصل ومن هويته المحلية قبل الدرس الخامس.
المقارنة الأصلية والنتيجة
من الأب المخصص، في لقطة منفصلة لا توجد وجهتها مسبقًا:
git clone --quiet "file://<absolute-source-path>" gittree-features-copyيبدأ <absolute-source-path> بـ / في تسجيل macOS، فتكون بعد file: ثلاث شرطات مائلة. استبدل العنصر النائب ولا تكتب الأقواس. خرج الأمر بالحالة 0، وطبع على قناة stderr:
warning: You appear to have cloned an empty repository.افحص النسخة:
cd "<course-parent>/gittree-features-copy"
git remote
git symbolic-ref --short HEAD
git config --local --get user.nameنتيجتا الأمرين الأولين:
origin
mainلا يطبع الاستعلام الأخير شيئًا ويخرج بالحالة 1؛ لم ينسخ الاستنساخ إعداد الاسم المحلي من الأصل. قد توفر إعداداتك العامة هوية فعالة على جهازك، لكن السؤال المحلي يقرأ النسخة وحدها. لا نعرض الإعدادات العامة على الكاميرا ولا نُودِع شيئًا في النسخة.
النتيجة
في نهاية هذا الدرس يكون الأصل مستودعًا عاديًا، وHEAD رمزيًا إلى main دون إيداع، ولا ملفات مشروع أو بعيد. الفهرس خالٍ منطقيًا، والهوية المحلية GitTree Demo / demo@example.com. أما النسخة الإضافية فلها origin دون تاريخ وتبقى خارج نقطة استمرار المشروع.
يبقى الرسم خاليًا عمدًا. ينشئ الدرس الخامس ملفي README.md وindex.html وأول إيداع مقصود.
أخطاء شائعة
- اختيار الأب بدل الابن: افحص الموقع والتبويب النشط قبل حفظ الإعداد.
- تشغيل وضع المجرّد: لا يوفر ملفات العمل اللازمة لصفحة الدورة.
- اختيار القوالب: تضيف ملفات غير مُودَعة خارج نقطة البداية الخالية.
- اعتبار HEAD دون إيداع فاسدًا: الحالة طبيعية بعد التهيئة.
- الاستنساخ فوق الأصل: استخدم وجهة جديدة أو فارغة منفصلة.
- توقّع نسخ الهوية المحلية: التاريخ يُنسخ، لا إعدادات الاسم والبريد المحلية للأصل.
- متابعة الدورة في النسخة: وجود origin يجعلها تختلف عن الأصل المحدد.
عند حدوث مشكلة
رفض وجهة غير فارغة يحمي محتواها. اختر ابنًا جديدًا دون حذف الملفات لإسكات الرسالة. أما غياب المجلد الأب فيحتاج إلى اختيار أب موجود أو إنشائه عمدًا قبل المحاولة.
إذا وجد مستودع سابق فافتحه وافحصه بدل إعادة تهيئته. وإن كان عملًا غير متعلق بالدورة فاتركه واستخدم مجلدًا منفصلًا.
عند فشل الاستنساخ اقرأ الخطأ ونتيجة التنظيف الحقيقية. يميّز التطبيق بين مجلد أنشأته العملية وأزالته، ومجلد سابق احتُفظ به، ومحتوى غير متوقع، وفشل الإزالة. إلغاء الاستنساخ يطلب التوقف ولا يثبت زوال كل شيء. افحص ما بقي قبل حذفه. التحذير من مصدر فارغ ليس فشلًا وحده.
عند نتائج ثقة غير مفهومة اختر الإلغاء أو الوضع المقيّد. لا تثق بمستودع عشوائي لمجرد إكمال الدرس؛ يعطل التقييد الشبكة وقد يحد بعض إجراءات مجلد العمل.
اختبر فهمك
أجب عن كل سؤال ثم اقرأ السبب. الأسئلة المعلَّمة «مطلوب» تُحتسب لإكمال الدرس.
0 من 6 صحيحة
أجب عن الأسئلة المطلوبة إجابة صحيحة لتكمل الدرس.
جرى التحقق في هذا المتصفح.
تدريب
أعد فتح الأصل بأمر فتح مستودع… (Open Repository…) أو إسقاط المجلد. افحص حالة مجلد العمل والمجرّد واسم الفرع، وغياب إيداع HEAD، وفراغ الحالة والفهرس والبعيد، وقيمتي الهوية المحلية. اشرح وجود main دون إيداع واختلاف origin بين النسخة والأصل.
توقّع مُدخل متغير: إذا استُخدم الفرع الأولي = trunk في تهيئة جديدة منفصلة، فما نتيجة git symbolic-ref --short HEAD؟ تكون trunk دون إنشاء إيداع. فُحص ذلك في نسخة أصلية معزولة أخرى؛ لا تغيّر main في المشروع المستمر لأجل التوقّع.
تأكيد منك أنت: لا يستطيع الموقع رؤية جهازك.
لإكمال الدرس، أجب عن الأسئلة المطلوبة إجابة صحيحة وأكّد تنفيذ التمرين العملي.
خلاصة
- التهيئة تنشئ البيانات، والاستنساخ ينشئ نسخة، والفتح يختار مستودعًا موجودًا.
- اسم main لا يضمن وجود أول إيداع.
- افصل الهوية المحلية والنسخة الإضافية عن إعداداتك العامة ونقطة المشروع الأصلية.
ذو صلة
المصطلحات الجديدة
Initialize — تهيئة؛ clone — استنساخ؛ repository — مستودع؛ branch — فرع؛ remote — بعيد؛ working tree — مجلد العمل؛ staging area — منطقة التجهيز. الفرع دون إيداع أول هو المقصود بـ unborn branch، ويظل HEAD وorigin معرّفين لاتينيين.
نص الفيديو
ترجمة التعليق الصوتي الإنجليزي للفيديو، مقطعًا بعد مقطع.
اعرض النص
- أنشئ مستودع الدورة، ثم ميّز الاستنساخ من الفتح.
- استخدم مجلدًا أبًا مخصصًا خارج مستودعات المصدر القائمة.
- هيّئ تاريخًا جديدًا، أو استنسخ نسخة، أو افتح مستودعًا موجودًا.
- ابدأ داخل GitTree من صفحة علامة تبويب جديدة.
- اختر تهيئة، وراجع النافذة قبل إنشاء أي شيء.
- أدخل المسار الكامل لمجلد gittree-features الجديد.
- منتقي المجلدات بديل؛ افحص قيمة الموقع النهائية.
- اختر main صراحةً بدل الاعتماد على افتراضي الجهاز.
- أبقِ وضع المجرّد معطلًا لأن المشروع يحتاج إلى ملفات عمل.
- ارفض القالبين الاختياريين للحفاظ على نقطة البدء الخالية.
- أبقِ الفتح بعد الإنشاء مفعّلًا ثم راجع كل اختيار.
- اختر تهيئة مرة واحدة وانتظر النتيجة الفعلية.
- إذا ظهرت مراجعة الثقة فاقرأ النتائج قبل منحها.
- أصبح الأصل موجودًا، لكن أول إيداع لم يُنشأ بعد.
- يمكن أن يسمّي HEAD الفرع main قبل وجود إيداع عند طرفه.
- افتح تفضيلات هذا المستودع، لا صفحة ملفات التعريف العامة.
- افحص هدف الكتابة قبل إدخال الهوية الخيالية.
- طبّق GitTree Demo اسمًا للإيداعات في هذا المستودع.
- طبّق البريد الخيالي على المستوى المحلي نفسه.
- يمكن لـ Enter تطبيق الحقل؛ اخرج بعد نجاح الكتابتين.
- تحقّق من أنك داخل مجلد عمل الأصل.
- يجب أن تكون نتيجة فحص المستودع المجرّد false.
- ينبغي أن يطبع فحص الفرع الرمزي main.
- لا يوجد إيداع يُحل إليه بعد؛ الخروج الصامت بالحالة 1 متوقع.
- ينبغي ألا تطبع الاستعلامات الثلاثة أي ناتج.
- اقرأ قيمتَي الهوية المحليتين فقط، لا الإعدادات العامة الخاصة.
- يمكن لـ Git التهيئة أيضًا؛ لا تعِد تهيئة أصل التطبيق.
- انسخ الآن المستودع الفارغ نفسه إلى مجلد محلي منفصل.
- افتح الاستنساخ واستخدم مسار URL لا قائمة حسابات المزوّد.
- استخدم عنوان file مطلقًا للأصل، لا مسارًا محليًا خامًا.
- سمِّ الوجهة صراحةً وتأكد من أنها ليست الأصل.
- أبقِ التاريخ كاملًا والخيارات المتقدمة معطلة.
- نفّذ الاستنساخ وانتظر اكتمال التقدم الفعلي.
- ينتج المصدر الفارغ نسخة دون إيداعات، وقد ينجح ذلك.
- تحذير المستودع الفارغ ليس فشلًا بحد ذاته.
- للنسخة origin وmain دون إيداع، لا خط أنابيب مستضاف.
- لم ينسخ الاستنساخ اسم الإيداعات المحلي من الأصل.
- يخص origin النسخة؛ لم يُضف بعيد إلى الأصل.
- افتح الأصل مجددًا قبل متابعة الدورة.
- إسقاط المجلد الموجود طريقة أخرى لفتحه، لا لاستنساخه.
- افحص الأصل مجددًا: دون بعيد أو إيداع، وبهويته المحلية.
- تهيئة منفصلة باسم trunk تعرض trunk دون إنشاء إيداع.
- يحمي رفض الوجهة محتوى قائمًا؛ اختر مجلدًا جديدًا.
- إذا فشل الاستنساخ أو أُلغي فاقرأ ما أبقاه التنظيف فعلًا.
- التراجع وسجل المراجع ليسا ضمانًا لعكس التهيئة أو إعداد الهوية.
- التهيئة تنشئ البيانات، والاستنساخ نسخة، والفتح يختار الموجود.
- تحقّق من حالة الأصل قبل إضافة أول الملفات.
- أنشئ الواجهة لاحقًا ثم أودِع أول تغيير مقصود.