
OCI2Git
[//]: # (mock untuk test.yaml di masa depan) [//]: # ([](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.

Fitur
- Menganalisis image Docker dan mengekstrak informasi layer
- Membuat repository Git di mana setiap layer image direpresentasikan sebagai commit
- Dukungan untuk layer kosong (ENV, WORKDIR, dll.) sebagai commit kosong
- Ekstraksi metadata secara lengkap ke format Markdown
- Arsitektur yang dapat diperluas untuk mendukung berbagai engine container
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 menjalankangit 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.

Pelacakan Asal
Dengan menggunakangit 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/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/pathPerintah-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 menggunakangit 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.

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 alpConvert 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:
- Batang utama yang berisi semua layer bersama
- Cabang terpisah yang menyimpang hanya ketika image benar-benar berbeda
- Visualisasi yang jelas tentang di mana image memiliki nenek moyang bersama vs. di mana mereka menjadi unik
- Penanganan duplikat yang cerdas: jika image yang sama persis diproses dua kali, algoritma mendeteksinya sebelum komit metadata akhir dan melewati pembuatan cabang duplikat
- Analisis Keluarga Image: Memahami bagaimana berbagai varian dari suatu image (versi berbeda, arsitektur, atau konfigurasi) saling berhubungan
- Dampak Image Dasar: Melihat secara tepat bagaimana perubahan pada image dasar memengaruhi banyak image turunan
- Peluang Optimasi: Mengidentifikasi komponen bersama yang dapat dimanfaatkan lebih baik di seluruh varian image

Kasus Penggunaan Tambahan
- Audit Keamanan: Identifikasi secara tepat kapan paket atau konfigurasi yang rentan diperkenalkan dan telusuri kembali ke instruksi build tertentu.
- Optimasi Image: Analisis struktur layer untuk menemukan operasi yang redundan atau file besar yang dapat dikonsolidasikan, membantu mengurangi ukuran image.
- Manajemen Dependensi: Pantau kapan dependensi ditambahkan, ditingkatkan, atau dihapus sepanjang riwayat image.
- Peningkatan Proses Build: Periksa komposisi layer untuk mengoptimalkan instruksi Dockerfile demi caching yang lebih baik dan ukuran image yang lebih kecil.
- Perbandingan Antar Image: Konversi beberapa image terkait ke repositori Git dan gunakan alat perbandingan Git untuk menganalisis perbedaan dan kesamaan mereka.
Instalasi
Dari Sumber
# Clone the repository
git clone https://github.com/virviil/oci2git.git
cd oci2gitInstall locally
cargo install --path .Dari Crates.io
cargo install oci2gitPenggunaan
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.tarMesin 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:latestConvert the tarball to a Git repository
oci2git -e tar -o ./ubuntu-repo ubuntu-latest.tarIni akan membuat repositori Git di ./ubuntu-repo yang berisi:
Image.md- Metadata lengkap tentang image dalam format Markdownrootfs/- Konten filesystem dari container
- Commit pertama hanya berisi file
Image.mddengan metadata lengkap - Setiap commit berikutnya mewakili satu layer dari image asli
- Commit mencantumkan perintah Dockerfile sebagai pesan commit
Struktur Repositori
repository/
├── .git/
├── Image.md # Complete image metadata
└── rootfs/ # Filesystem content from the container
Persyaratan
- Rust edisi 2021
- Docker CLI (untuk dukungan Docker engine)
- Git
Lisensi
MIT
[dokumentasi]: https://docs.rs/oci2git/
--- Tranlated By Open Ai Tx | Last indexed: 2025-12-12 ---