الكود، والـ repos، والـ codebases
حين شغّلت محادثتك الأولى مع Claude في المستوى الثاني، فتحتها داخل مجلد. ونظر Claude في الملفات الموجودة هناك وأجاب عن أسئلة عنها. ذلك المجلد كان، على الأرجح، codebase.
الـ code هو التعليمات المقروءة من قِبَل البشر التي تجعل قطعة من البرمجيات تعمل. والـ codebase هي كل ذلك الكود، منظّمًا في مجلد. والـ repository (أو repo) هو codebase مضافًا إليها سجلّ كامل لكل تغيير أُجري عليها على الإطلاق.
عمليًا، يستخدم الناس repo وcodebase بالتبادل تقريبًا. «افتح الـ repo» و*«افتح الـ codebase»* يعنيان الشيء ذاته.
كيف يبدو
افتح repo نموذجيًا وسترى شجرة مجلدات تشبه هذه:
my-app/
├── README.md ← ما هذا المشروع، وكيف يُشغَّل
├── package.json ← قائمة بالـ libraries التي يستخدمها هذا المشروع
├── src/ ← الكود المصدري الفعلي
│ ├── index.js
│ ├── components/
│ └── pages/
├── public/ ← صور، وخطوط، وأشياء ثابتة
├── tests/ ← كود يختبر كودًا آخر
└── .git/ ← السجلّ (مخفي افتراضيًا)
هذا تقريبًا ما يبدو عليه كل مشروع ويب على وجه الأرض. أسماء المجلدات تتغيّر. أما الشكل فلا يتغيّر.
مجلد .git/ هو المجلد السحري — فهناك يعيش السجلّ. سنخوض فيه كما ينبغي في المستوى الثامن.
شاهده بنفسك
تلك الشجرة ليست مخطّطًا خاصًّا — إنها ببساطة ما ستراه لو فتحت repo في الـ terminal. هناك مشروع صغير اسمه taskly ينتظرك في الـ terminal التدريبي. اعرض ما الموجود في أعلاه:
ls
ملف README.md، وملف package.json، ومجلد src/ — الشكل نفسه كالشجرة أعلاه. انظر داخل مجلد المصدر:
ls src
والآن اطلب من الـ terminal أن يعرض لك كل ملف في المشروع، مهما كان مخبّأً في العمق:
find . -type f
يسير find في الشجرة كلها ويسرد كل ملف يصل إليه. تلك القائمة القصيرة هي الـ codebase — كل تعليمة تجعل taskly يعمل، موجودة في ملفات عادية داخل مجلدات عادية. جدار المصطلحات ينقشع في اللحظة التي تدرك فيها أنها مجرد ملفات يمكنك عرضها.
النقطة التي تربك الناس عادةً
الـ repo ليس مجرد الحالة الراهنة للملفات. إنه كل نسخة من تلك الملفات، رجوعًا إلى وقت بداية المشروع.
تخيّل مستند غوغل يمكنك فيه أن ترجع إلى أيّ ثانية من أيّ يوم، وترى من أجرى كل تغيير، وتعمل undo لأيٍّ منها دون عمل undo للبقية. ذلك repo.
في كل مرة يُجري فيها مطوّر commit لتغيير، يتذكّره الـ repo إلى الأبد. وبعد خمس سنوات لا يزال بإمكانك أن ترى بالضبط ما الذي تغيّر يوم ثلاثاء محدّد في عام 2021. لهذا تضع الفِرَق الكود في repo وليس في دروبوكس — السجلّ هو المقصود.
الـ tool الذي يجعل هذا ممكنًا يُسمّى Git. سنتعلّم استخدامها بطريقة Claude في المستوى الثامن. أما الآن، فاحتفظ بهذه الفكرة: حين يقول أحدهم «الـ repo»، فهو يعني الكود مضافًا إليه آلة الزمن الملحقة به.
GitHub وGitLab وBitbucket
الـ repo يعيش في مجلد على حاسوبك. لكن الفِرَق تحتاج إلى مشاركة الـ repos، لذا يُنسَخ المجلد إلى hosting service على الإنترنت.
- GitHub — الأكثر شيوعًا بفارق كبير. تملكه مايكروسوفت. ويعيش هنا تقريبًا كل مشروع مفتوح المصدر.
- GitLab — مشابه، ويُستخدم غالبًا من قِبَل الشركات التي تريد الاستضافة الذاتية.
- Bitbucket — في المرتبة الثالثة. ويُستخدم غالبًا من قِبَل الفِرَق التي تستعمل tools الخاصة بـ Atlassian أصلًا.
حين يقول أحدهم «أرسل لي رابط GitHub»، فهو يعني: أرسل لي الـ URL الخاص بـ repo الخاص بك على GitHub. الكود موجود على جهازك وجهازه وعلى GitHub، وكله متزامن.
ما التالي
افتح repo وسترى جدارًا من أنواع الملفات التي قد لا تتعرّف عليها: .tsx و.py و.go وpackage.json وrequirements.txt. الدرس التالي يفكّ شفرتها — ما الـ language، وما الـ framework، وما الـ package؟