Web Analytics

oci2git

⭐ 374 stars Persian 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 تبدیل می‌کند. هر لایه کانتینر به صورت یک commit در Git نمایش داده می‌شود و تاریخچه و ساختار تصویر اصلی را حفظ می‌کند.

نمایش دمو از OCI2Git هنگام تبدیل تصویر nginx

ویژگی‌ها

کاربردها

مقایسه لایه‌ها (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/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
این دستورات ردیابی کامل تاریخچه هر فایل را در سراسر لایه‌های کانتینر ساده می‌کنند، بدون پیچیدگی استخراج و مقایسه دستی آرشیوهای لایه‌ای.

تحلیل چندلایه‌ای

گاهی اوقات مفیدترین مقایسه‌ها از بررسی تغییرات در چندین لایه غیر متوالی حاصل می‌شود. با OCI2Git می‌توانید از ابزارهای مقایسه Git برای تحلیل نحوه تحول اجزا در مراحل مختلف ساخت بهره ببرید و الگوهایی را شناسایی کنید که ممکن است هنگام بررسی فقط لایه‌های مجاور قابل مشاهده نباشند.

کاوش در لایه‌ها

با استفاده از git checkout برای رفتن به هر کامیت خاص، می‌توانید سیستم فایل کانتینر را دقیقاً همانطور که در آن لایه وجود داشته بررسی کنید. این امکان به توسعه‌دهندگان اجازه می‌دهد وضعیت دقیق فایل‌ها و دایرکتوری‌ها را در هر نقطه از فرآیند ساخت تصویر بررسی کنند و هنگام اشکال‌زدایی یا بررسی رفتار کانتینر، زمینه‌ای ارزشمند فراهم می‌آورد. Checkout to previous commit

تحلیل چندتصویری

هنگام کار با چند تصویر کانتینر که نیاکان مشترک دارند، 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 در یونیکس/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:latest

Convert the tarball to a Git repository

oci2git -e tar -o ./ubuntu-repo ubuntu-latest.tar
این کار یک مخزن گیت در مسیر ./ubuntu-repo ایجاد می‌کند که شامل موارد زیر است: تاریخچه گیت بازتاب‌دهنده تاریخچه لایه‌های کانتینر است:

ساختار مخزن

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