"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > Mini-git، فهم كيفية تخزين الملفات في كائنات Git

Mini-git، فهم كيفية تخزين الملفات في كائنات Git

تم النشر بتاريخ 2024-08-24
تصفح:942

Mini-git, Understanding How Files Are Stored in Git Objects

بالأمس، شرعت في تنفيذ إحدى وظائف Git الأساسية بمفردي - على وجه التحديد، كيفية تخزين الملفات، وما هي كائنات Git، وعمليات التجزئة والضغط. لقد استغرق الأمر مني 4 ساعات للتطوير، وفي هذه المقالة، سأرشدك خلال عملية التفكير والنهج الذي أتبعه.

ماذا يحدث عند تنفيذ ملف؟

عند تنفيذ ملف في Git، تحدث عدة خطوات مهمة تحت الغطاء:

ضغط الملف:

يتم ضغط محتوى الملف باستخدام خوارزمية zlib لتقليل حجمه. هذا المحتوى المضغوط هو ما يتم تخزينه في قاعدة بيانات كائنات Git.

حساب التجزئة:

يتم إنشاء تجزئة SHA-1 فريدة من محتوى الملف المضغوط. يعمل هذا التجزئة كمعرف للملف في قاعدة بيانات كائنات Git.

تخزين الكائن:

يتم تخزين ملف الكائن في دليل .mygit/objects، ويتم تنظيمه حسب أول حرفين من التجزئة. تسهل هذه البنية إدارة الكائنات واستردادها بكفاءة.
تحديث معلومات الالتزام:

لتوضيح كيفية تخزين الملفات في بوابة.
لقد قمت بتنفيذ وظيفة الالتزام، مع أخذ ملف واحد بعين الاعتبار

  1. لكل ملف، قمت بحساب التجزئة
  2. داخل مجلد الكائنات، يتم إنشاء مجلد جديد باسم يساوي أول حرفين من التجزئة.
  3. ويتم إنشاء ملف داخل هذا المجلد مع التجزئة المتبقية كاسم. (يخزن هذا الملف التنسيق المضغوط للملف الملتزم)
  4. تم اكتشاف التغييرات من خلال مقارنة التجزئة المحسوبة حديثًا وآخر تجزئة محسوبة للملف

اكتشاف التغييرات

لقد قمت بتنفيذ هذه الخوارزمية بناءً على نهجي الخاص، لكن Git يستخدم خوارزميات أكثر كفاءة لهذه العمليات.

  1. مجموعة الأسطر المستخرجة من المحتوى القديم والمحتوى الجديد
  2. تم إنشاء خريطة لتخزين الخط كمفتاح والفهرس كقيمة
  3. تم إنشاء صفيفين جديدين لتخزين فهارس الخطوط المشتركة في المحتوى القديم والمحتوى الجديد 4. على سبيل المثال: OldCommonarray = [0 , 3] ثم الأسطر المحذوفة ستكون [1,2]

جيثب ريبو
لينكد إن

شكرًا جزيلاً على وقتك.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/keerthivardhan1/mini-git-understanding-how-files-are-stored-in-git-objects-5bfb?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3