Web Analytics

oci2git

⭐ 374 stars Turkish by Virviil

🌐 Dil

OCI2Git

[Dokümantasyon][documentation] Crates.io Lisans İndirmeler

[//]: # (gelecekteki test.yaml için mock) [//]: # ([![Test Durumu](https://img.shields.io/github/actions/workflow/status/Virviil/oci2git/rust.yml?branch=master&event=push&label=Test)](https://github.com/Virviil/oci2git/actions))

Konteyner imajlarını (Docker, vb.) Git deposuna dönüştüren bir Rust uygulamasıdır. Her konteyner katmanı bir Git commit'i olarak temsil edilir, orijinal imajın geçmişi ve yapısı korunur.

OCI2Git'in nginx imajını dönüştürme demosu

Özellikler

Kullanım Alanları

Katman Karşılaştırma

Konteyner sorunlarını giderirken, Git'in güçlü karşılaştırma (diff) yeteneklerini kullanarak herhangi iki katman arasında tam olarak neyin değiştiğini belirleyebilirsiniz. Commitler arasında git diff çalıştırarak, mühendisler hangi dosyaların eklendiğini, değiştirildiğini veya silindiğini net bir şekilde görebilir, böylece her Dockerfile talimatının etkisini anlamak ve sorunlu değişiklikleri bulmak çok daha kolay hale gelir. Katman karşılaştırma örneği

Kaynak Takibi

git blame kullanarak geliştiriciler, belirli bir dosya veya kod satırının hangi katmanda eklendiğini hızlıca belirleyebilir. Bu, özellikle yapılandırma dosyaları veya bağımlılıklarla ilgili sorunları teşhis ederken çok değerlidir. Her katmanı manuel olarak incelemek yerine, herhangi bir dosyanın kaynağını anında bulabilir ve ilgili Dockerfile talimatına kadar izleyebilirsiniz.

Dosya Yaşam Döngüsü Takibi

OCI2Git sayesinde, bir dosyanın konteyner imajı boyunca izlediği yolu takip edebilirsiniz. Bir dosyanın ilk ne zaman oluşturulduğunu, katmanlar boyunca nasıl değiştirildiğini ve en sonunda ne zaman silindiğini gözlemleyebilirsiniz. Bu kapsamlı görünüm, dosyanın evrimini anlamanızı sağlar ve potansiyel olarak onlarca katman arasında değişiklikleri manuel olarak takip etme ihtiyacını ortadan kaldırır.

Konteyner imajınızdaki bir dosyanın geçmişini — ilk ne zaman göründüğünü, değiştirildiğini veya silindiğini — dönüştürmeden sonra aşağıdaki Git komutları ile takip edebilirsiniz:

# 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

Bu komutlar, katman arşivlerini manuel olarak çıkartıp karşılaştırmanın karmaşıklığı olmadan, herhangi bir dosyanın konteyner katmanları arasındaki tam geçmişini izlemeyi kolaylaştırır.

Çok Katmanlı Analiz

Bazen en anlamlı karşılaştırmalar, ardışık olmayan birden fazla katmandaki değişiklikleri inceleyerek elde edilir. OCI2Git ile, bileşenlerin birden fazla derleme aşamasında nasıl evrildiğini analiz etmek için Git’in karşılaştırma araçlarını kullanabilir, yalnızca bitişik katmanlara bakıldığında fark edilmeyen desenleri tespit edebilirsiniz.

Katman Keşfi

Herhangi bir belirli commite geçmek için git checkout komutunu kullanarak, konteyner dosya sistemini o katmanda olduğu gibi inceleyebilirsiniz. Bu, geliştiricilere, imajın oluşturulma sürecinin herhangi bir noktasında dosyaların ve dizinlerin kesin durumunu inceleme olanağı sağlar, hata ayıklarken veya konteyner davranışını incelerken paha biçilmez bir bağlam sunar. Önceki commite geçiş

Çoklu İmaj Analizi

Ortak bir soya sahip birden fazla konteyner imajı ile çalışırken, OCI2Git yalnızca imajlar gerçekten ayrıştığında akıllıca dallar oluşturur. Böylece, ortak geçmişlerini korurken, tek bir depoda birden fazla ilgili imajı analiz edebilirsiniz.

# 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, görüntüler arasında paylaşılan katmanları otomatik olarak algılar ve ortak tabanlarını yansıtan dallanma yapısı oluşturur. Git geçmişi şunları gösterecektir:

Bu yaklaşım özellikle şu durumlar için değerlidir: Paylaşılan taban ve ayrışan dalları gösteren çoklu görüntü depo yapısı

Ek Kullanım Senaryoları

Kurulum

Kaynaktan

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

Install locally

cargo install --path .

Crates.io'dan

cargo install oci2git

Kullanım

oci2git [OPTIONS] 

Argümanlar: Dönüştürülecek imaj adı (örn., 'ubuntu:latest') veya tar motoru kullanılırken tarball yolu

Seçenekler: -o, --output Git deposu için çıktı dizini [varsayılan: ./container_repo] -e, --engine Kullanılacak konteyner motoru (docker, nerdctl, tar) [varsayılan: docker] -h, --help Yardım bilgisini yazdır -V, --version Sürüm bilgisini yazdır

Ortam Değişkenleri: TMPDIR Varsayılan olarak ara veri işlemede kullanılan konumu değiştirmek için bu ortam değişkenini ayarlayın. Bu, platforma bağlıdır (örn., Unix/macOS'ta TMPDIR, Windows'ta TEMP veya TMP).

Örnekler

Docker motorunu kullanmak (varsayılan):

oci2git -o ./ubuntu-repo ubuntu:latest

Zaten indirilmiş bir imaj tarball'ını kullanmak:

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

Tar motoru, genellikle docker save ile oluşturulan geçerli bir OCI formatında tarball bekler:

# 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

Bu, ./ubuntu-repo dizininde bir Git deposu oluşturacak ve şunları içerecek:

Git geçmişi, konteynerin katman geçmişini yansıtır:

Depo Yapısı

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

Gereksinimler

Lisans

MIT

[dokümantasyon]: https://docs.rs/oci2git/

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