Web Analytics

oci2git

⭐ 374 stars Polish by Virviil

🌐 Język

OCI2Git

[Dokumentacja][documentation] Crates.io Licencja Pobrania

[//]: # (mock na potrzeby przyszłego test.yaml) [//]: # ([![Status testu](https://img.shields.io/github/actions/workflow/status/Virviil/oci2git/rust.yml?branch=master&event=push&label=Test)](https://github.com/Virviil/oci2git/actions))

Aplikacja Rust, która konwertuje obrazy kontenerów (Docker itd.) do repozytoriów Git. Każda warstwa kontenera jest reprezentowana jako commit Git, zachowując historię i strukturę oryginalnego obrazu.

Demo OCI2Git konwertującego obraz nginx

Funkcje

Przypadki użycia

Porównywanie warstw

Podczas rozwiązywania problemów z kontenerami możesz użyć potężnych możliwości porównywania Git, aby dokładnie zidentyfikować, co zmieniło się pomiędzy dowolnymi dwoma warstwami. Uruchamiając git diff między commitami, inżynierowie mogą zobaczyć, które pliki zostały dodane, zmodyfikowane lub usunięte, co znacznie ułatwia zrozumienie wpływu każdej instrukcji Dockerfile i lokalizowanie problematycznych zmian. Przykład porównania warstw

Śledzenie pochodzenia

Używając git blame, programiści mogą szybko określić, która warstwa wprowadziła dany plik lub linię kodu. Jest to szczególnie wartościowe podczas diagnozowania problemów z plikami konfiguracyjnymi lub zależnościami. Zamiast ręcznie przeszukiwać każdą warstwę, możesz natychmiast prześledzić pochodzenie dowolnego pliku do jego źródłowej warstwy i odpowiadającej instrukcji Dockerfile.

Śledzenie cyklu życia pliku

OCI2Git pozwala śledzić historię konkretnego pliku w całym obrazie kontenera. Możesz obserwować, kiedy plik został utworzony, jak był modyfikowany w kolejnych warstwach i czy/został usunięty. Ten kompleksowy widok pozwala zrozumieć ewolucję pliku bez konieczności ręcznego śledzenia zmian przez dziesiątki warstw.

Aby śledzić historię pliku w obrazie kontenera — w tym, kiedy pojawił się po raz pierwszy, został zmieniony lub usunięty — możesz użyć tych poleceń Git po konwersji:

# 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

Te polecenia umożliwiają łatwe śledzenie pełnej historii dowolnego pliku w warstwach kontenera bez konieczności ręcznego wyodrębniania i porównywania archiwów warstw.

Analiza wielowarstwowa

Czasami najbardziej wartościowe porównania wynikają z badania zmian pomiędzy wieloma, niekolejnymi warstwami. Dzięki OCI2Git możesz używać narzędzi porównawczych Git do analizy ewolucji komponentów na różnych etapach budowy, identyfikując wzorce, które mogą być niewidoczne przy oglądaniu tylko sąsiednich warstw.

Eksploracja warstw

Korzystając z git checkout do przechodzenia do dowolnego konkretnego commita, możesz zbadać system plików kontenera dokładnie tak, jak wyglądał w danej warstwie. Pozwala to deweloperom analizować dokładny stan plików i katalogów w każdym punkcie procesu tworzenia obrazu, zapewniając nieoceniony kontekst podczas debugowania lub badania zachowania kontenera. Przejście do poprzedniego commita

Analiza wielu obrazów

Pracując z wieloma obrazami kontenerów, które mają wspólne pochodzenie, OCI2Git inteligentnie tworzy gałęzie tylko wtedy, gdy obrazy rzeczywiście się rozchodzą. Pozwala to analizować wiele powiązanych obrazów w jednym repozytorium, zachowując ich wspólną historię.

# 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 automatycznie wykrywa współdzielone warstwy między obrazami i tworzy strukturę rozgałęzień odzwierciedlającą ich wspólną bazę. Historia Git pokazuje: To podejście jest szczególnie wartościowe dla: Struktura repozytorium wielu obrazów pokazująca współdzieloną bazę i rozgałęziające się gałęzie

Dodatkowe scenariusze użycia

Instalacja

Z źródła

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

Install locally

cargo install --path .

Z Crates.io

cargo install oci2git

Użytkowanie

oci2git [OPTIONS] 
Argumenty: Nazwa obrazu do konwersji (np. 'ubuntu:latest') lub ścieżka do archiwum tar przy użyciu silnika tar

Opcje: -o, --output Katalog wyjściowy dla repozytorium Git [domyślnie: ./container_repo] -e, --engine Silnik kontenerowy do użycia (docker, nerdctl, tar) [domyślnie: docker] -h, --help Wyświetl informacje pomocy -V, --version Wyświetl informacje o wersji

Zmienne środowiskowe: TMPDIR Ustaw tę zmienną środowiskową, aby zmienić domyślną lokalizację używaną do przetwarzania danych pośrednich. Jest to zależne od platformy (np. TMPDIR w Unix/macOS, TEMP lub TMP w Windows).

Przykłady

Użycie silnika Docker (domyślnie):

oci2git -o ./ubuntu-repo ubuntu:latest

Używanie już pobranego archiwum tarball obrazu:

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

Silnik tar oczekuje prawidłowego pliku tar w formacie OCI, który zwykle jest tworzony za pomocą polecenia 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

To utworzy repozytorium Git w ./ubuntu-repo, zawierające:

Historia Git odzwierciedla historię warstw kontenera:

Struktura repozytorium

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

Wymagania

Licencja

MIT

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

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