Web Analytics

oci2git

⭐ 401 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 تبدیل می‌کند و صورت‌حساب فایل‌های سیستم (fsbom) را به صورت YAML تولید می‌کند. هر لایه کانتینر به عنوان یک کامیت 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
این دستورات ردیابی کامل تاریخچه هر فایل را در سراسر لایه‌های کانتینر ساده می‌کنند، بدون پیچیدگی استخراج و مقایسه دستی آرشیوهای لایه‌ای.

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

گاهی اوقات مفیدترین مقایسه‌ها از بررسی تغییرات در چندین لایه غیر متوالی حاصل می‌شود. با 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 به طور خودکار لایه‌های مشترک بین تصاویر را شناسایی می‌کند و ساختار شاخه‌ای را ایجاد می‌نماید که پایه مشترک آن‌ها را نشان می‌دهد. تاریخچه گیت موارد زیر را نمایش خواهد داد: این رویکرد به ویژه برای موارد زیر ارزشمند است: ساختار مخزن چند تصویری که پایه مشترک و شاخه‌های منشعب را نشان می‌دهد

موارد استفاده اضافی

نصب

مدیریت بسته‌ها

#### macOS / Linux (Homebrew)

brew tap virviil/oci2git
brew install oci2git

#### دبیان / اوبونتو

بسته .deb را از آخرین نسخه منتشر شده دانلود و نصب کنید:

# For amd64 (x86_64)
wget https://github.com/virviil/oci2git/releases/latest/download/oci2git_VERSION_amd64.deb
sudo dpkg -i oci2git_VERSION_amd64.deb

For arm64

wget https://github.com/virviil/oci2git/releases/latest/download/oci2git_VERSION_arm64.deb sudo dpkg -i oci2git_VERSION_arm64.deb

#### آرچ لینوکس (AUR)

# Using yay
yay -S oci2git-bin

Using paru

paru -S oci2git-bin

Manual installation

git clone https://aur.archlinux.org/oci2git-bin.git cd oci2git-bin makepkg -si

فایل‌های اجرایی آماده

فایل اجرایی مناسب برای پلتفرم خود را از آخرین نسخه منتشر شده دانلود کنید:

# Linux x86_64
wget https://github.com/virviil/oci2git/releases/latest/download/oci2git-linux-x86_64.tar.gz
tar xzf oci2git-linux-x86_64.tar.gz
sudo mv oci2git-linux-x86_64 /usr/local/bin/oci2git
chmod +x /usr/local/bin/oci2git

macOS (Apple Silicon)

wget https://github.com/virviil/oci2git/releases/latest/download/oci2git-darwin-aarch64.tar.gz tar xzf oci2git-darwin-aarch64.tar.gz sudo mv oci2git-darwin-aarch64 /usr/local/bin/oci2git chmod +x /usr/local/bin/oci2git

از Crates.io

cargo install oci2git

از منبع

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

Install locally

cargo install --path .

استفاده

oci2git [OPTIONS] 
oci2git convert [OPTIONS] 
oci2git fsbom [OPTIONS] 

convert — تصویر OCI → مخزن گیت

oci2git convert [OPTIONS] 

or simply:

oci2git

گزینه‌ها: -o, --output پوشه خروجی برای مخزن گیت [پیش‌فرض: ./container_repo] -e, --engine موتور کانتینر مورد استفاده (docker، nerdctl، tar) [پیش‌فرض: docker] -v, --verbose حالت پرجزئیات (-v برای اطلاعات، -vv برای اشکال‌زدایی، -vvv برای ردیابی)

fsbom — فهرست اجزای فایل‌سیستم

oci2git fsbom [OPTIONS] 
گزینه‌ها: -o, --output مسیر خروجی برای فایل BOM در قالب YAML [پیش‌فرض: ./fsbom.yml] -e, --engine موتور کانتینر مورد استفاده (docker، nerdctl، tar) [پیش‌فرض: docker] -v, --verbose حالت پرجزئیات (-v برای اطلاعات، -vv برای اشکال‌زدایی، -vvv برای ردیابی)

متغیرهای محیطی: TMPDIR این متغیر محیطی را برای تغییر مکان پیش‌فرض مورد استفاده در پردازش داده‌های واسطه تنظیم کنید. این متغیر وابسته به پلتفرم است (مثلاً TMPDIR در یونیکس/macOS، TEMP یا TMP در ویندوز).

مثال‌ها

تبدیل

استفاده از موتور Docker (پیش‌فرض):

oci2git ubuntu:latest

or explicitly:

oci2git convert ubuntu:latest -o ./ubuntu-repo
استفاده از یک بسته فشرده تصویر که قبلاً دانلود شده است:

oci2git convert -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 convert -e tar -o ./ubuntu-repo ubuntu-latest.tar
این کار یک مخزن گیت در ./ubuntu-repo ایجاد می‌کند که شامل موارد زیر است: تاریخچه گیت منعکس‌کننده تاریخچه لایه‌های کانتینر است:

صورت مواد سیستم فایل (fsbom)

تولید یک فایل YAML که هر فایل معرفی‌شده یا تغییر یافته در هر لایه را لیست می‌کند:

oci2git fsbom ubuntu:latest -o ubuntu.yml
استفاده از یک بسته فشرده (tarball):

oci2git fsbom -e tar image.tar -o image-bom.yml
خروجی YAML هر لایه را با ورودی‌هایش که بر اساس نوع (file، hardlink، symlink، directory) و وضعیت (n:uid:gid برای جدید، m:uid:gid برای اصلاح‌شده) برچسب‌گذاری شده‌اند، فهرست می‌کند. فایل‌های حذف‌شده (سفیدپوش‌های OCI) مستثنی شده‌اند.

layers:
  
  • index: 0
command: "ADD rootfs.tar.gz / # buildkit" digest: "sha256:45f3ea58..." entries:
  • type: file
path: "bin/busybox" size: 919304 mode: 493 stat: "n:0:0"
  • type: hardlink
path: "bin/sh" target: "bin/busybox" stat: "n:0:0"
  • type: symlink
path: "lib64" target: "lib" stat: "n:0:0"
  • index: 1
command: "RUN apk add --no-cache curl" digest: "sha256:..." entries:
  • type: file
path: "usr/bin/curl" size: 204800 mode: 493 stat: "n:0:0"
  • type: file
path: "etc/apk/world" size: 32 mode: 420 stat: "m:0:0"

ساختار مخزن

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: 2026-04-02 ---