Web Analytics

oci2git

⭐ 374 stars French by Virviil

🌐 Langue

OCI2Git

[Documentation][documentation] Crates.io Licence Téléchargements

[//]: # (simulation pour un futur test.yaml) [//]: # ([![Statut du 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))

Une application Rust qui convertit des images de conteneur (Docker, etc.) en dépôts Git. Chaque couche du conteneur est représentée comme un commit Git, préservant l’historique et la structure de l’image d’origine.

Démonstration d’OCI2Git convertissant l’image nginx

Fonctionnalités

Cas d’utilisation

Différenciation des couches

Pour le dépannage des problèmes de conteneur, vous pouvez utiliser les puissantes fonctionnalités de comparaison de Git pour identifier exactement ce qui a changé entre deux couches. En exécutant git diff entre des commits, les ingénieurs peuvent voir précisément quels fichiers ont été ajoutés, modifiés ou supprimés, ce qui facilite grandement la compréhension de l’impact de chaque instruction Dockerfile et la localisation des modifications problématiques. Exemple de diff de couche

Traçabilité de l’origine

Grâce à git blame, les développeurs peuvent rapidement déterminer quelle couche a introduit un fichier ou une ligne de code spécifique. Ceci est particulièrement utile lors du diagnostic de problèmes avec des fichiers de configuration ou des dépendances. Au lieu d’inspecter manuellement chaque couche, vous pouvez immédiatement retracer l’origine de n’importe quel fichier jusqu’à sa couche source et l’instruction Dockerfile correspondante.

Suivi du cycle de vie d’un fichier

OCI2Git vous permet de suivre le parcours d’un fichier spécifique à travers l’historique de l’image du conteneur. Vous pouvez observer quand un fichier a été créé, comment il a été modifié à travers les couches, et s’il a éventuellement été supprimé. Cette vue complète aide à comprendre l’évolution d’un fichier sans avoir à suivre manuellement les changements sur des dizaines de couches potentielles.

Pour suivre l’historique d’un fichier dans votre image de conteneur — y compris sa première apparition, ses modifications ou sa suppression — vous pouvez utiliser ces commandes Git après conversion :

# 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
Ces commandes facilitent la traçabilité de l'historique complet de n'importe quel fichier à travers les couches du conteneur, sans la complexité d'extraire et de comparer manuellement les archives tar des couches.

Analyse Multi-Couches

Parfois, les comparaisons les plus pertinentes proviennent de l'examen des changements à travers plusieurs couches non consécutives. Avec OCI2Git, vous pouvez utiliser les outils de comparaison de Git pour analyser l'évolution des composants sur plusieurs étapes de construction, identifiant des motifs invisibles en regardant uniquement les couches adjacentes.

Exploration des Couches

En utilisant git checkout pour passer à un commit spécifique, vous pouvez examiner le système de fichiers du conteneur tel qu'il existait à cette couche. Cela permet aux développeurs d'inspecter l'état précis des fichiers et répertoires à n'importe quel moment du processus de création de l'image, fournissant un contexte précieux lors du débogage ou de l'examen du comportement du conteneur. Checkout to previous commit

Analyse Multi-Images

Lorsqu'on travaille avec plusieurs images de conteneurs partageant une ascendance commune, OCI2Git crée intelligemment des branches uniquement lorsque les images divergent réellement. Cela permet d'analyser plusieurs images liées dans un seul dépôt tout en conservant leur histoire commune.

# 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 détecte automatiquement les couches partagées entre les images et crée une structure en branches qui reflète leur base commune. L’historique Git affichera : Cette approche est particulièrement précieuse pour : Structure de dépôt multi-images montrant la base partagée et les branches divergentes

Cas d’utilisation supplémentaires

Installation

Depuis les sources

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

Install locally

cargo install --path .

Depuis Crates.io

cargo install oci2git

Utilisation

oci2git [OPTIONS] 
Arguments : Nom de l'image à convertir (par exemple, 'ubuntu:latest') ou chemin vers une archive tar lors de l'utilisation du moteur tar

Options : -o, --output Répertoire de sortie pour le dépôt Git [par défaut : ./container_repo] -e, --engine Moteur de conteneur à utiliser (docker, nerdctl, tar) [par défaut : docker] -h, --help Afficher l'aide -V, --version Afficher la version

Variables d'environnement : TMPDIR Définissez cette variable d'environnement pour modifier l'emplacement par défaut utilisé pour le traitement intermédiaire des données. Cela dépend de la plateforme (par exemple, TMPDIR sous Unix/macOS, TEMP ou TMP sous Windows).

Exemples

Utilisation du moteur Docker (par défaut) :

oci2git -o ./ubuntu-repo ubuntu:latest

Utilisation d’une archive d’image déjà téléchargée :

oci2git -e tar -o ./ubuntu-repo /path/to/ubuntu-latest.tar
Le moteur tar attend une archive tar au format OCI valide, généralement créée avec 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

Cela créera un dépôt Git dans ./ubuntu-repo contenant :

L'historique Git reflète l'historique des couches du conteneur :

Structure du dépôt

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

Prérequis

Licence

MIT

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

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