Web Analytics

oci2git

⭐ 374 stars Italian by Virviil

🌐 Lingua

OCI2Git

[Documentazione][documentation] Crates.io Licenza Download

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

Un'applicazione Rust che converte le immagini di container (Docker, ecc.) in repository Git. Ogni livello del container è rappresentato come un commit Git, preservando la cronologia e la struttura dell'immagine originale.

Demo di OCI2Git che converte l'immagine nginx

Caratteristiche

Casi d'Uso

Differenze tra Livelli

Quando si risolvono problemi con i container, puoi utilizzare le potenti funzionalità di confronto di Git per identificare esattamente cosa è cambiato tra due livelli. Eseguendo git diff tra i commit, gli ingegneri possono vedere con precisione quali file sono stati aggiunti, modificati o eliminati, rendendo molto più semplice comprendere l'impatto di ogni istruzione Dockerfile e individuare modifiche problematiche. Esempio di differenza tra livelli

Tracciamento dell'Origine

Usando git blame, gli sviluppatori possono determinare rapidamente quale livello ha introdotto uno specifico file o riga di codice. Questo è particolarmente utile quando si diagnosticano problemi con file di configurazione o dipendenze. Invece di ispezionare manualmente ogni livello, puoi tracciare immediatamente l'origine di qualsiasi file fino al livello sorgente e alla corrispondente istruzione Dockerfile.

Tracciamento del Ciclo di Vita dei File

OCI2Git ti permette di seguire il percorso di uno specifico file attraverso la cronologia dell'immagine del container. Puoi osservare quando un file è stato creato inizialmente, come è stato modificato nei vari livelli e se/quando è stato eventualmente rimosso. Questa visione completa aiuta a comprendere l'evoluzione dei file senza dover tracciare manualmente le modifiche su decine di livelli.

Per tracciare la storia di un file nella tua immagine container — incluso quando è apparso per la prima volta, è stato modificato o eliminato — puoi usare questi comandi Git dopo la conversione:

# 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

Questi comandi rendono semplice tracciare la storia completa di qualsiasi file attraverso i livelli del container, senza la complessità di estrarre e confrontare manualmente i tarball dei livelli.

Analisi Multi-Livello

Talvolta i confronti più significativi emergono esaminando le modifiche tra più livelli non consecutivi. Con OCI2Git, puoi utilizzare gli strumenti di confronto di Git per analizzare come i componenti si sono evoluti durante più fasi di build, identificando schemi che potrebbero essere invisibili osservando solo i livelli adiacenti.

Esplorazione dei Livelli

Utilizzando git checkout per spostarti su uno specifico commit, puoi esaminare il filesystem del container esattamente come esisteva in quel livello. Questo permette agli sviluppatori di ispezionare lo stato preciso di file e directory in qualsiasi momento del processo di creazione dell'immagine, fornendo un contesto prezioso durante il debug o l’analisi del comportamento del container. Checkout a un commit precedente

Analisi Multi-Immagine

Quando si lavora con più immagini container che condividono una discendenza comune, OCI2Git crea intelligentemente dei branch solo quando le immagini effettivamente divergono. Questo ti permette di analizzare più immagini correlate in un unico repository, preservando la loro storia comune.

# 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 rileva automaticamente i layer condivisi tra le immagini e crea una struttura ramificata che riflette la loro base comune. La cronologia Git mostrerà:

Questo approccio è particolarmente utile per: Struttura del repository multi-immagine che mostra base condivisa e rami divergenti

Casi d'Uso Aggiuntivi

Installazione

Da Sorgente

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

Install locally

cargo install --path .

Da Crates.io

cargo install oci2git

Utilizzo

oci2git [OPTIONS] 

Argomenti: Nome dell'immagine da convertire (es. 'ubuntu:latest') o percorso al file tar quando si usa il motore tar

Opzioni: -o, --output Directory di output per il repository Git [default: ./container_repo] -e, --engine Motore container da usare (docker, nerdctl, tar) [default: docker] -h, --help Stampa le informazioni di aiuto -V, --version Stampa le informazioni sulla versione

Variabili d'Ambiente: TMPDIR Imposta questa variabile d'ambiente per cambiare la posizione predefinita usata per l'elaborazione dei dati intermedi. Questa è dipendente dalla piattaforma (es. TMPDIR su Unix/macOS, TEMP o TMP su Windows).

Esempi

Utilizzo del motore Docker (predefinito):

oci2git -o ./ubuntu-repo ubuntu:latest

Utilizzo di un tarball di immagini già scaricato:

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

Il motore tar si aspetta un tarball in formato OCI valido, che viene tipicamente creato con 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

Questo creerà un repository Git in ./ubuntu-repo contenente:

La cronologia Git riflette la cronologia dei layer del container:

Struttura del repository

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

Requisiti

Licenza

MIT

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

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