
OCI2Git
[//]: # (شبیهسازی برای test.yaml آینده) [//]: # ([](https://github.com/Virviil/oci2git/actions))
یک برنامه Rust که تصاویر کانتینری (Docker و غیره) را به مخازن Git تبدیل میکند. هر لایه کانتینر به صورت یک commit در Git نمایش داده میشود و تاریخچه و ساختار تصویر اصلی را حفظ میکند.

ویژگیها
- تحلیل تصاویر Docker و استخراج اطلاعات لایهها
- ایجاد یک مخزن Git که هر لایه تصویر به صورت یک commit نمایش داده میشود
- پشتیبانی از لایههای خالی (ENV، WORKDIR و غیره) به عنوان commitهای خالی
- استخراج کامل اطلاعات متادیتا به فرمت Markdown
- معماری قابل توسعه برای پشتیبانی از موتورهای مختلف کانتینر
کاربردها
مقایسه لایهها (Layer Diffing)
هنگام عیبیابی مشکلات کانتینر، میتوانید از قابلیت مقایسه قدرتمند Git برای شناسایی دقیق تغییرات بین دو لایه استفاده کنید. با اجرایgit diff بین commitها، مهندسان میتوانند دقیقا مشاهده کنند چه فایلهایی اضافه، ویرایش یا حذف شدهاند، که درک تاثیر هر دستور Dockerfile و یافتن تغییرات مشکلساز را بسیار سادهتر میکند.

رهگیری منشاء (Origin Tracking)
با استفاده ازgit blame، توسعهدهندگان میتوانند به سرعت تعیین کنند که کدام لایه یک فایل یا خط خاص را معرفی کرده است. این موضوع بهویژه هنگام عیبیابی فایلهای پیکربندی یا وابستگیها بسیار ارزشمند است. به جای بررسی دستی هر لایه، میتوانید بلافاصله منشاء هر فایل را تا لایه مبدا و دستور Dockerfile مرتبط دنبال کنید.رهگیری چرخه عمر فایل (File Lifecycle Tracking)
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
این دستورات ردیابی کامل تاریخچه هر فایل را در سراسر لایههای کانتینر ساده میکنند، بدون پیچیدگی استخراج و مقایسه دستی آرشیوهای لایهای.تحلیل چندلایهای
گاهی اوقات مفیدترین مقایسهها از بررسی تغییرات در چندین لایه غیر متوالی حاصل میشود. با 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 alpOCI2Git به طور خودکار لایههای مشترک بین تصاویر را شناسایی میکند و ساختاری شاخهای ایجاد میکند که پایه مشترک آنها را نشان میدهد. تاریخچه 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 در یونیکس/macOS، TEMP یا TMP در ویندوز).
مثالها
استفاده از موتور Docker (پیشفرض):
oci2git -o ./ubuntu-repo ubuntu:latest
استفاده از یک بسته فشرده تصویر که قبلاً دانلود شده است:oci2git -e tar -o ./ubuntu-repo /path/to/ubuntu-latest.tar
موتور tar انتظار یک فایل tar با فرمت معتبر 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
این کار یک مخزن گیت در مسیر ./ubuntu-repo ایجاد میکند که شامل موارد زیر است:
Image.md- فراداده کامل درباره تصویر به صورت فرمت Markdownrootfs/- محتوای سیستمفایل استخراجشده از کانتینر
- اولین کامیت فقط شامل فایل
Image.mdبا فراداده کامل است - هر کامیت بعدی نمایانگر یک لایه از تصویر اصلی است
- پیام کامیت شامل دستور Dockerfile مربوط به آن لایه است
ساختار مخزن
repository/
├── .git/
├── Image.md # Complete image metadata
└── rootfs/ # Filesystem content from the containerالزامات
- نسخه ۲۰۲۱ زبان Rust
- رابط خط فرمان Docker (برای پشتیبانی از موتور Docker)
- گیت
مجوز
MIT
[مستندات]: https://docs.rs/oci2git/
--- Tranlated By Open Ai Tx | Last indexed: 2025-12-12 ---