Web Analytics

oci2git

⭐ 374 stars German by Virviil

🌐 Sprache

OCI2Git

[Dokumentation][documentation] Crates.io Lizenz Downloads

[//]: # (Mock für zukünftige test.yaml) [//]: # ([![Teststatus](https://img.shields.io/github/actions/workflow/status/Virviil/oci2git/rust.yml?branch=master&event=push&label=Test)](https://github.com/Virviil/oci2git/actions))

Eine Rust-Anwendung, die Container-Images (Docker, etc.) in Git-Repositories umwandelt. Jede Container-Schicht wird als Git-Commit dargestellt, wobei die Historie und Struktur des Original-Images erhalten bleiben.

Demo von OCI2Git bei der Konvertierung des nginx-Images

Funktionen

Anwendungsfälle

Layer-Diffing

Beim Troubleshooting von Container-Problemen können Sie mit den leistungsfähigen Diff-Funktionen von Git genau feststellen, was sich zwischen zwei Schichten geändert hat. Durch Ausführen von git diff zwischen Commits sehen Entwickler exakt, welche Dateien hinzugefügt, geändert oder gelöscht wurden, was das Verständnis der Auswirkungen jeder Dockerfile-Anweisung erleichtert und problematische Änderungen schnell auffindbar macht. Beispiel für Layer-Diff

Herkunftsnachverfolgung

Mit git blame können Entwickler schnell ermitteln, welche Schicht eine bestimmte Datei oder Codezeile eingeführt hat. Dies ist besonders wertvoll bei der Fehlersuche in Konfigurationsdateien oder Abhängigkeiten. Anstatt jede Schicht manuell zu prüfen, können Sie die Herkunft jeder Datei sofort bis zur Ursprungs-Schicht und der zugehörigen Dockerfile-Anweisung zurückverfolgen.

Lebenszyklus-Verfolgung von Dateien

OCI2Git ermöglicht es, die Entwicklung einer bestimmten Datei über die gesamte Historie eines Container-Images hinweg nachzuverfolgen. Sie sehen, wann eine Datei erstmals erstellt, wie sie über die Schichten hinweg verändert und ob/wann sie schließlich entfernt wurde. Diese umfassende Ansicht hilft, die Entwicklung von Dateien nachzuvollziehen, ohne Änderungen über dutzende Schichten manuell verfolgen zu müssen.

Um die Historie einer Datei in Ihrem Container-Image nachzuverfolgen – einschließlich wann sie erstmals auftrat, geändert oder gelöscht wurde – können Sie nach der Konvertierung diese Git-Befehle verwenden:

# 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

Diese Befehle machen es einfach, die vollständige Historie einer Datei über Container-Ebenen hinweg nachzuverfolgen, ohne die Komplexität des manuellen Extrahierens und Vergleichens von Layer-Tarballs.

Analyse über mehrere Ebenen

Manchmal sind die aufschlussreichsten Vergleiche diejenigen, die Veränderungen über mehrere nicht aufeinanderfolgende Ebenen hinweg betrachten. Mit OCI2Git können Sie die Vergleichswerkzeuge von Git nutzen, um zu analysieren, wie sich Komponenten über mehrere Build-Stufen entwickelt haben und Muster zu erkennen, die beim Betrachten nur benachbarter Ebenen unsichtbar bleiben könnten.

Ebenen-Erkundung

Durch die Verwendung von git checkout, um zu einem bestimmten Commit zu wechseln, können Sie das Container-Dateisystem genau so untersuchen, wie es in dieser Ebene existierte. Dies ermöglicht Entwicklern, den exakten Zustand von Dateien und Verzeichnissen zu jedem Zeitpunkt im Erstellungsprozess des Images zu inspizieren und liefert wertvolle Kontextinformationen beim Debuggen oder Untersuchen des Containerverhaltens. Checkout zu vorherigem Commit

Analyse mehrerer Images

Wenn mit mehreren Container-Images gearbeitet wird, die eine gemeinsame Abstammung haben, erstellt OCI2Git intelligent nur dann Branches, wenn die Images tatsächlich auseinanderlaufen. So können Sie mehrere verwandte Images in einem einzigen Repository analysieren und dabei deren gemeinsame Historie bewahren.

# 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 erkennt automatisch gemeinsam genutzte Layer zwischen Images und erstellt eine Verzweigungsstruktur, die deren gemeinsamen Ursprung widerspiegelt. Die Git-Historie zeigt:

Dieser Ansatz ist besonders wertvoll für: Multi-Image-Repository-Struktur mit gemeinsamem Basis und sich verzweigenden Branches

Weitere Anwendungsfälle

Installation

Aus dem Quellcode

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

Install locally

cargo install --path .

Von Crates.io

cargo install oci2git

Verwendung

oci2git [OPTIONS] 

Argumente: Name des zu konvertierenden Images (z. B. 'ubuntu:latest') oder Pfad zur Tarball-Datei bei Verwendung der Tar-Engine

Optionen: -o, --output Ausgabeverzeichnis für das Git-Repository [Standard: ./container_repo] -e, --engine Zu verwendende Container-Engine (docker, nerdctl, tar) [Standard: docker] -h, --help Hilfeinformationen anzeigen -V, --version Versionsinformationen anzeigen

Umgebungsvariablen: TMPDIR Setzen Sie diese Umgebungsvariable, um den Standardort für die Verarbeitung von Zwischendaten zu ändern. Dies ist plattformabhängig (z. B. TMPDIR unter Unix/macOS, TEMP oder TMP unter Windows).

Beispiele

Verwendung der Docker-Engine (Standard):

oci2git -o ./ubuntu-repo ubuntu:latest
Verwendung eines bereits heruntergeladenen Image-Tarballs:

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

Die Tar-Engine erwartet ein gültiges OCI-Format-Tarball, das typischerweise mit docker save erstellt wird:

# 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

Dadurch wird ein Git-Repository in ./ubuntu-repo erstellt, das Folgendes enthält:

Die Git-Historie spiegelt die Layer-Historie des Containers wider:

Repository-Struktur

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

Anforderungen

Lizenz

MIT

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

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