Web Analytics

oci2git

⭐ 374 stars Arabic by Virviil

🌐 اللغة

OCI2Git

[التوثيق][documentation] Crates.io الرخصة التنزيلات

[//]: # (محاكاة لملف test.yaml مستقبلي) [//]: # ([![حالة الاختبار](https://img.shields.io/github/actions/workflow/status/Virviil/oci2git/rust.yml?branch=master&event=push&label=Test)](https://github.com/Virviil/oci2git/actions))

تطبيق بلغة Rust يقوم بتحويل صور الحاويات (Docker، وغيرها) إلى مستودعات Git. كل طبقة في الحاوية تمثل كتزامن في Git، مع الحفاظ على السجل والبنية للصورة الأصلية.

عرض توضيحي لتحويل صورة nginx بواسطة OCI2Git

الميزات

حالات الاستخدام

مقارنة الطبقات

عند استكشاف مشاكل الحاويات، يمكنك استخدام قدرات Git القوية للمقارنة لمعرفة التغييرات الدقيقة بين أي طبقتين. باستخدام أمر git diff بين التزامين، يمكن للمهندسين رؤية الملفات التي تمت إضافتها أو تعديلها أو حذفها بدقة، مما يسهل فهم أثر كل تعليمة Dockerfile وتحديد التغييرات المسببة للمشاكل. مثال لمقارنة الطبقات

تتبع الأصل

باستخدام git blame، يمكن للمطورين بسرعة تحديد الطبقة التي أدخلت ملفًا معينًا أو سطرًا من الشيفرة. هذا مفيد بشكل خاص عند تشخيص مشاكل ملفات الإعداد أو الاعتمادات. بدلاً من تفقد كل طبقة يدويًا، يمكنك تتبع أصل أي ملف مباشرة إلى الطبقة الأصلية وتعليمة Dockerfile المقابلة.

تتبع دورة حياة الملفات

تتيح لك أداة OCI2Git متابعة مسار أي ملف عبر تاريخ صورة الحاوية. يمكنك معرفة متى تم إنشاء الملف لأول مرة، وكيف تم تعديله عبر الطبقات، وإذا أو متى تم حذفه في النهاية. توفر هذه الرؤية الشاملة فهماً لتطور الملف دون الحاجة لتعقب التغييرات يدويًا عبر العديد من الطبقات.

لتتبع تاريخ ملف في صورة الحاوية — بما في ذلك وقت ظهوره الأول، أو تغييره، أو حذفه — يمكنك استخدام أوامر Git التالية بعد التحويل:

# Full history of a file (including renames)
git log --follow -- /rootfs/my/file/path

First appearance (i.e. creation) - see which layer introduced the file

git log --diff-filter=A -- /rootfs/my/file/path

All changes made to the file (with diffs)

git log -p --follow -- /rootfs/my/file/path

When the file was deleted

git log --diff-filter=D -- /rootfs/my/file/path

Show 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 alp

Convert second image to the same output folder

oci2git nginx:1.28.0-alpine-slim -o alp

يقوم OCI2Git بالكشف تلقائيًا عن الطبقات المشتركة بين الصور وينشئ هيكل تفرع يعكس الأساس المشترك بينها. سيُظهر سجل Git ما يلي:

هذا النهج ذو قيمة خاصة لـ: هيكل مستودع متعدد الصور يُظهر الأساس المشترك والفروع المتباعدة

حالات استخدام إضافية

التثبيت

من المصدر

# Clone the repository
git clone https://github.com/virviil/oci2git.git
cd oci2git

Install 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:latest

Convert the tarball to a Git repository

oci2git -e tar -o ./ubuntu-repo ubuntu-latest.tar

سيؤدي هذا إلى إنشاء مستودع Git في ./ubuntu-repo يحتوي على:

يعكس سجل Git تاريخ طبقات الحاوية:

هيكل المستودع

repository/
├── .git/
├── Image.md     # Complete image metadata
└── rootfs/      # Filesystem content from the container

المتطلبات

الترخيص

MIT

[التوثيق]: https://docs.rs/oci2git/

--- Tranlated By Open Ai Tx | Last indexed: 2025-12-12 ---