Web Analytics

oci2git

⭐ 374 stars Indonesian by Virviil

🌐 Bahasa

OCI2Git

[Dokumentasi][documentation] Crates.io Lisensi Unduhan

[//]: # (mock untuk test.yaml di masa depan) [//]: # ([![Status Tes](https://img.shields.io/github/actions/workflow/status/Virviil/oci2git/rust.yml?branch=master&event=push&label=Test)](https://github.com/Virviil/oci2git/actions))

Aplikasi Rust yang mengonversi image container (Docker, dll.) menjadi repository Git. Setiap layer container direpresentasikan sebagai commit Git, menjaga riwayat dan struktur dari image asli.

Demo OCI2Git mengonversi image nginx

Fitur

Kasus Penggunaan

Perbandingan Layer

Saat menelusuri masalah container, Anda dapat menggunakan kemampuan diffing Git yang kuat untuk mengidentifikasi perubahan tepat antara dua layer mana pun. Dengan menjalankan git diff antar commit, engineer dapat melihat secara persis file mana yang ditambahkan, diubah, atau dihapus, sehingga lebih mudah memahami dampak dari setiap instruksi Dockerfile dan menemukan perubahan bermasalah. Contoh diff layer

Pelacakan Asal

Dengan menggunakan git blame, developer dapat dengan cepat menentukan layer mana yang memperkenalkan file atau baris kode tertentu. Ini sangat berguna saat mendiagnosis masalah pada file konfigurasi atau dependensi. Alih-alih memeriksa setiap layer secara manual, Anda dapat langsung menelusuri asal file mana pun kembali ke layer sumbernya dan instruksi Dockerfile yang sesuai.

Pelacakan Siklus Hidup File

OCI2Git memungkinkan Anda mengikuti perjalanan file tertentu sepanjang riwayat image container. Anda dapat mengamati kapan sebuah file pertama kali dibuat, bagaimana file tersebut diubah di berbagai layer, dan jika/kapan akhirnya dihapus. Pandangan komprehensif ini membantu memahami evolusi file tanpa harus melacak perubahan secara manual di puluhan layer.

Untuk melacak riwayat suatu file dalam image container Anda — termasuk kapan file itu pertama kali muncul, diubah, atau dihapus — Anda dapat menggunakan perintah Git berikut setelah konversi:

# 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

Perintah-perintah ini memudahkan untuk melacak riwayat lengkap setiap file di seluruh lapisan kontainer tanpa kerumitan mengekstrak dan membandingkan tarball lapisan secara manual.

Analisis Multi-Lapisan

Terkadang perbandingan yang paling mendalam didapat dari memeriksa perubahan di beberapa lapisan yang tidak berurutan. Dengan OCI2Git, Anda dapat menggunakan alat perbandingan Git untuk menganalisis bagaimana komponen berkembang sepanjang beberapa tahap build, mengidentifikasi pola yang mungkin tidak terlihat jika hanya melihat lapisan yang berdekatan.

Eksplorasi Lapisan

Dengan menggunakan git checkout untuk berpindah ke commit tertentu, Anda dapat memeriksa sistem file kontainer persis seperti yang ada pada lapisan tersebut. Ini memungkinkan pengembang untuk menginspeksi keadaan file dan direktori secara tepat di setiap titik dalam proses pembuatan image, memberikan konteks yang sangat penting saat debugging atau memeriksa perilaku kontainer. Checkout ke commit sebelumnya

Analisis Multi-Image

Saat bekerja dengan beberapa image kontainer yang memiliki asal usul yang sama, OCI2Git secara cerdas membuat branch hanya ketika image benar-benar bercabang. Ini memungkinkan Anda untuk menganalisis beberapa image yang terkait dalam satu repository sambil tetap menjaga riwayat umum mereka.

# 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 secara otomatis mendeteksi layer bersama antar image dan membuat struktur percabangan yang mencerminkan basis bersama mereka. Riwayat Git akan menunjukkan: Pendekatan ini sangat berharga untuk: Struktur repositori multi-image yang menunjukkan basis bersama dan cabang yang menyimpang

Kasus Penggunaan Tambahan

Instalasi

Dari Sumber

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

Install locally

cargo install --path .

Dari Crates.io

cargo install oci2git

Penggunaan

oci2git [OPTIONS] 

Argumen: Nama image yang akan dikonversi (misal, 'ubuntu:latest') atau path ke tarball saat menggunakan engine tar

Opsi: -o, --output Direktori output untuk repositori Git [default: ./container_repo] -e, --engine Engine container yang digunakan (docker, nerdctl, tar) [default: docker] -h, --help Cetak informasi bantuan -V, --version Cetak informasi versi

Variabel Lingkungan: TMPDIR Atur variabel lingkungan ini untuk mengubah lokasi default yang digunakan untuk pemrosesan data sementara. Ini bergantung pada platform (misal, TMPDIR di Unix/macOS, TEMP atau TMP di Windows).

Contoh

Menggunakan engine Docker (default):

oci2git -o ./ubuntu-repo ubuntu:latest
Menggunakan tarball citra yang sudah diunduh:

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

Mesin tar mengharapkan tarball format OCI yang valid, yang biasanya dibuat dengan 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

Ini akan membuat repositori Git di ./ubuntu-repo yang berisi:

Riwayat Git mencerminkan riwayat layer container:

Struktur Repositori

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

Persyaratan

Lisensi

MIT

[dokumentasi]: https://docs.rs/oci2git/

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