المستودع والسجل

مستكشف الكائنات

لـ git سمعة بأنه معقّد. وكل ذلك تقريبًا آتٍ من عدم رؤية النموذج قط: أربعة أنواع من الكائنات، ومؤشرات. وحالما تستطيع النقر على التزام، والهبوط على شجرته، واكتشاف أن ملفك هو كتلة أعطتها شجرةٌ اسمًا، يكفّ الغلاف الظاهر عن كونه سحرًا.

⌘K ← مستكشف الكائنات. لا شيء في هذه الصفحة يستطيع تغيير بايت واحد — فكل استدعاء خلفها قراءة.

حقول التزام، مع شجرته وآبائه كروابط، بجوار قائمة المراجع

الكائنات الأربعة

الكائن هو يعرف
blob محتويات ملف لا شيء. لا اسمه ولا مساره ولا سجله
tree سرد لمجلد الأسماء والأنماط وبصمة sha لكل كتلة أو شجرة ابنة
commit لقطة واحدة شجرته وآباؤه والمؤلف والملتزِم والرسالة
tag وسم موصوف الكائن الذي يشير إليه، والواسم، ورسالة

المفاجأة عند معظم الناس هي الصف الأول. الكتلة بلا اسم. ملفان بمحتوى متطابق في أي موضع من سجلك هما الكتلة نفسها، مخزَّنة مرة واحدة. الاسم يعيش في الشجرة التي تشير إليها — ولهذا يتتبّع git المحتوى لا الملفات، ولهذا تُكتشف عمليات إعادة التسمية بدل أن تُسجَّل.

والمرجع — refs/heads/main وrefs/tags/v1.0 وHEAD — ليس إلا ملفًا يحوي بصمة sha. هذا هو كل ما تعنيه عبارة «التفريع رخيص».

التجوّل

يسرد العمود الجانبي كل مرجع في المستودع، مجموعًا كما يجمعه git. انقر واحدًا لتهبط على الكائن الذي يسمّيه.

ومن هناك كل شيء رابط:

  • الالتزام يعرض tree الخاص به وكل parent — انقر للعبور إلى اللقطة، أو للرجوع في السجل التزامًا التزامًا.
  • الشجرة تسرد مدخلاتها بالنمط والنوع وبصمة sha والحجم. انقر اسمًا لفتح ذلك الابن.
  • الكتلة تعرض نصها (أوله، إن كانت كبيرة)، أو تقول بوضوح إنها ثنائية.
  • الوسم الموصوف يعرض ما يشير إليه — انقر للعبور إلى الالتزام.

رجوع يعيد تتبّع خطواتك.

كتابة مراجعة

يقبل الصندوق أي شيء يقبله git rev-parse، وهنا يكفّ هذا عن كونه متصفحًا ويصير طريقة للتعلّم:

اكتب هذا لتحصل على
HEAD الالتزام الحالي
HEAD~3 ثلاثة التزامات إلى الوراء
HEAD^{tree} شجرة ذلك الالتزام، مقشَّرة
HEAD:src/app.ts الكتلة الخاصة بذلك المسار، مباشرةً
v1.0^{} ما يشير إليه وسم موصوف، بدل كائن الوسم نفسه
a1b2c3d أي كائن، ببصمته — والاختصارات تعمل

أرقام النمط في سرد الشجرة تستحق المعرفة: 100644 ملف، و100755 تنفيذي، و040000 شجرة فرعية، و120000 رابط رمزي، و160000 رابط وحدة فرعية — وهذا الأخير هو كل ما تخزّنه الوحدة الفرعية.

حدود تستحق المعرفة

  • للقراءة فقط، عن قصد. لا شيء هنا يُكتب به. صنع الكائنات يدويًا تمرينٌ على git hash-object، ومكانه الطرفية.
  • الكتل الكبيرة تُبتر بعد أول 200 كيلوبايت — بما يكفي لرؤية ما هي، ولا يكفي لتعليق النافذة.
  • الأحجام هي حجم محتوى الكائن كما يبلّغ عنه git cat-file -s، لا ما يكلّفه على القرص بعد الحزم. ولذلك انظر الصيانة.
  • الكائنات غير القابلة للوصول تبقى كائنات. الصق بصمة من تقرير git fsck عن الكائنات المعلّقة فتُفتح، وهذه غالبًا أسرع طريقة لرؤية ما كان يحويه التزام ضائع قبل أن تقرر استعادته من عدمه.

انظر أيضًا: الرسم البياني · صيانة المستودع · الاستعادة

حسّن هذه الترجمة على GitHub