
OCI2Git
[//]: # (محاكاة لملف test.yaml مستقبلي) [//]: # ([](https://github.com/Virviil/oci2git/actions))
تطبيق بلغة Rust يقوم بتحويل صور الحاويات (Docker، وغيرها) إلى مستودعات Git. كل طبقة في الحاوية تمثل كتزامن في Git، مع الحفاظ على السجل والبنية للصورة الأصلية.

الميزات
- تحليل صور Docker واستخراج معلومات الطبقات
- إنشاء مستودع Git حيث تمثل كل طبقة صورة تزامنًا منفصلاً
- دعم الطبقات الفارغة (ENV، WORKDIR، إلخ) كتزامنات فارغة
- استخراج كامل للبيانات الوصفية بتنسيق Markdown
- بنية قابلة للتوسعة لدعم محركات الحاويات المختلفة
حالات الاستخدام
مقارنة الطبقات
عند استكشاف مشاكل الحاويات، يمكنك استخدام قدرات Git القوية للمقارنة لمعرفة التغييرات الدقيقة بين أي طبقتين. باستخدام أمرgit diff بين التزامين، يمكن للمهندسين رؤية الملفات التي تمت إضافتها أو تعديلها أو حذفها بدقة، مما يسهل فهم أثر كل تعليمة Dockerfile وتحديد التغييرات المسببة للمشاكل.

تتبع الأصل
باستخدامgit blame، يمكن للمطورين بسرعة تحديد الطبقة التي أدخلت ملفًا معينًا أو سطرًا من الشيفرة. هذا مفيد بشكل خاص عند تشخيص مشاكل ملفات الإعداد أو الاعتمادات. بدلاً من تفقد كل طبقة يدويًا، يمكنك تتبع أصل أي ملف مباشرة إلى الطبقة الأصلية وتعليمة Dockerfile المقابلة.تتبع دورة حياة الملفات
تتيح لك أداة OCI2Git متابعة مسار أي ملف عبر تاريخ صورة الحاوية. يمكنك معرفة متى تم إنشاء الملف لأول مرة، وكيف تم تعديله عبر الطبقات، وإذا أو متى تم حذفه في النهاية. توفر هذه الرؤية الشاملة فهماً لتطور الملف دون الحاجة لتعقب التغييرات يدويًا عبر العديد من الطبقات.لتتبع تاريخ ملف في صورة الحاوية — بما في ذلك وقت ظهوره الأول، أو تغييره، أو حذفه — يمكنك استخدام أوامر Git التالية بعد التحويل:
# Full history of a file (including renames)
git log --follow -- /rootfs/my/file/pathFirst appearance (i.e. creation) - see which layer introduced the file
git log --diff-filter=A -- /rootfs/my/file/pathAll changes made to the file (with diffs)
git log -p --follow -- /rootfs/my/file/pathWhen the file was deleted
git log --diff-filter=D -- /rootfs/my/file/pathShow short commit info (concise layer history)
git log --follow --oneline -- /rootfs/my/file/path
تجعل هذه الأوامر من السهل تتبع التاريخ الكامل لأي ملف عبر طبقات الحاوية دون تعقيد استخراج ومقارنة ملفات tar للطبقات يدويًا.التحليل متعدد الطبقات
في بعض الأحيان تأتي المقارنات الأكثر إفادة من فحص التغييرات عبر عدة طبقات غير متتالية. باستخدام OCI2Git، يمكنك الاستفادة من أدوات المقارنة في Git لتحليل كيفية تطور المكونات عبر مراحل بناء متعددة، واكتشاف الأنماط التي قد تكون غير مرئية عند النظر فقط إلى الطبقات المتجاورة.استكشاف الطبقات
من خلال استخدام أمرgit checkout للانتقال إلى أي التزام محدد، يمكنك فحص نظام ملفات الحاوية تمامًا كما كان موجودًا في تلك الطبقة. يتيح ذلك للمطورين استكشاف الحالة الدقيقة للملفات والمجلدات في أي نقطة من عملية إنشاء الصورة، مما يوفر سياقًا لا يقدر بثمن عند تصحيح الأخطاء أو فحص سلوك الحاوية.

التحليل متعدد الصور
عند العمل مع عدة صور حاوية تشترك في أصل مشترك، يقوم OCI2Git بإنشاء الفروع بشكل ذكي فقط عندما تتباعد الصور فعليًا. يتيح لك ذلك تحليل عدة صور ذات صلة في مستودع واحد مع الحفاظ على تاريخها المشترك.
# Convert first image to create the base repository
oci2git postgres:16.9-alpine3.21 -o alpConvert second image to the same output folder
oci2git nginx:1.28.0-alpine-slim -o alpيقوم OCI2Git بالكشف تلقائيًا عن الطبقات المشتركة بين الصور وينشئ هيكل تفرع يعكس الأساس المشترك بينها. سيُظهر سجل Git ما يلي:
- جذع مشترك يحتوي على جميع الطبقات المشتركة
- فروع منفصلة تتباعد فقط عندما تختلف الصور فعليًا
- تصور واضح لمكان اشتراك الصور في السلف المشترك مقابل مكان تفردها
- معالجة ذكية للتكرار: إذا تم معالجة نفس الصورة تمامًا مرتين، يكتشف الخوارزم ذلك قبل التزام البيانات الوصفية النهائي ويتخطى إنشاء فرع مكرر
- تحليل عائلة الصور: فهم كيفية ارتباط المتغيرات المختلفة لصورة (إصدارات، معماريات، أو إعدادات مختلفة) ببعضها البعض
- تأثير الصورة الأساسية: رؤية كيف تؤثر التغييرات على صورة أساسية في صور مشتقة متعددة
- فرص تحسين: تحديد المكونات المشتركة التي يمكن الاستفادة منها بشكل أفضل عبر متغيرات الصور

حالات استخدام إضافية
- تدقيق الأمان: تحديد بالضبط متى تم إدخال الحزم أو الإعدادات المعرضة للخطر وتتبعها إلى تعليمات البناء المحددة.
- تحسين الصور: تحليل هياكل الطبقات للعثور على العمليات أو الملفات الكبيرة المكررة التي يمكن دمجها، مما يساعد في تقليل حجم الصورة.
- إدارة الاعتماديات: مراقبة متى تمت إضافة أو ترقية أو إزالة الاعتماديات عبر سجل الصورة.
- تحسين عملية البناء: فحص تركيب الطبقات لتحسين تعليمات Dockerfile لتحقيق تخزين مؤقت أفضل وحجم صورة أصغر.
- مقارنة الصور المتقاطعة: تحويل عدة صور ذات صلة إلى مستودعات Git واستخدام أدوات المقارنة في Git لتحليل اختلافاتها وقواسمها المشتركة.
التثبيت
من المصدر
# Clone the repository
git clone https://github.com/virviil/oci2git.git
cd oci2gitInstall locally
cargo install --path .من Crates.io
cargo install oci2gitالاستخدام
oci2git [OPTIONS] المعطيات:
اسم الصورة المراد تحويلها (مثال: 'ubuntu:latest') أو مسار ملف tar عند استخدام محرك tar
الخيارات:
-o, --output دليل الإخراج لمستودع Git [القيمة الافتراضية: ./container_repo]
-e, --engine محرك الحاوية المراد استخدامه (docker، nerdctl، tar) [القيمة الافتراضية: docker]
-h, --help طباعة معلومات المساعدة
-V, --version طباعة معلومات الإصدار
متغيرات البيئة:
TMPDIR قم بتعيين هذا المتغير البيئي لتغيير الموقع الافتراضي المستخدم لمعالجة البيانات الوسيطة. هذا يعتمد على نظام التشغيل (مثال: TMPDIR على Unix/macOS، أو TEMP أو TMP على Windows).
أمثلة
استخدام محرك Docker (افتراضي):
oci2git -o ./ubuntu-repo ubuntu:latestاستخدام أرشيف صورة تم تنزيله مسبقًا:
oci2git -e tar -o ./ubuntu-repo /path/to/ubuntu-latest.tar
يتوقع محرك tar ملف tarball صالح بتنسيق OCI، والذي يتم إنشاؤه عادةً باستخدام الأمر docker save:# Create a tarball from a local Docker image
docker save -o ubuntu-latest.tar ubuntu:latestConvert the tarball to a Git repository
oci2git -e tar -o ./ubuntu-repo ubuntu-latest.tarسيؤدي هذا إلى إنشاء مستودع Git في ./ubuntu-repo يحتوي على:
Image.md- بيانات وصفية كاملة عن الصورة بتنسيق Markdownrootfs/- محتوى نظام الملفات من الحاوية
- يحتوي الالتزام الأول فقط على ملف
Image.mdمع جميع البيانات الوصفية - يمثل كل التزام لاحق طبقة من الصورة الأصلية
- تتضمن الالتزامات أمر Dockerfile كرسالة الالتزام
هيكل المستودع
repository/
├── .git/
├── Image.md # Complete image metadata
└── rootfs/ # Filesystem content from the container
المتطلبات
- إصدار Rust 2021
- واجهة أوامر Docker (لدعم محرك Docker)
- Git
الترخيص
MIT
[التوثيق]: https://docs.rs/oci2git/
--- Tranlated By Open Ai Tx | Last indexed: 2025-12-12 ---