Web Analytics

oci2git

⭐ 374 stars Portuguese by Virviil

🌐 Idioma

OCI2Git

[Documentação][documentation] Crates.io Licença Downloads

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

Uma aplicação Rust que converte imagens de contêiner (Docker, etc.) em repositórios Git. Cada camada do contêiner é representada como um commit Git, preservando o histórico e a estrutura da imagem original.

Demo do OCI2Git convertendo a imagem nginx

Funcionalidades

Casos de Uso

Diferença entre Camadas

Ao solucionar problemas de contêineres, você pode usar os recursos avançados de diff do Git para identificar exatamente o que mudou entre duas camadas. Executando git diff entre commits, engenheiros podem ver precisamente quais arquivos foram adicionados, modificados ou removidos, facilitando a compreensão do impacto de cada instrução do Dockerfile e a localização de mudanças problemáticas. Exemplo de diferença de camada

Rastreio de Origem

Usando git blame, desenvolvedores podem determinar rapidamente qual camada introduziu um arquivo ou linha de código específico. Isto é particularmente valioso ao diagnosticar problemas com arquivos de configuração ou dependências. Em vez de inspecionar manualmente cada camada, você pode imediatamente rastrear a origem de qualquer arquivo até sua camada de origem e a instrução correspondente do Dockerfile.

Rastreio do Ciclo de Vida do Arquivo

O OCI2Git permite que você acompanhe a jornada de um arquivo específico ao longo do histórico da imagem do contêiner. É possível observar quando um arquivo foi criado inicialmente, como foi modificado entre as camadas e se/quando foi eventualmente removido. Essa visão abrangente ajuda a entender a evolução do arquivo sem precisar rastrear manualmente as mudanças em dezenas de camadas.

Para rastrear o histórico de um arquivo na sua imagem de contêiner — incluindo quando ele apareceu pela primeira vez, foi alterado ou excluído — você pode usar estes comandos Git após a conversão:

# 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

Esses comandos tornam simples rastrear o histórico completo de qualquer arquivo através das camadas de contêiner, sem a complexidade de extrair e comparar manualmente os arquivos tar das camadas.

Análise Multi-Camadas

Às vezes, as comparações mais reveladoras vêm da análise de mudanças em múltiplas camadas não consecutivas. Com o OCI2Git, você pode usar as ferramentas de comparação do Git para analisar como os componentes evoluíram ao longo de vários estágios de build, identificando padrões que podem ser invisíveis ao observar apenas camadas adjacentes.

Exploração de Camadas

Ao utilizar git checkout para mover para qualquer commit específico, você pode examinar o sistema de arquivos do contêiner exatamente como ele existia naquela camada. Isso permite que desenvolvedores inspecionem o estado preciso dos arquivos e diretórios em qualquer ponto do processo de criação da imagem, fornecendo um contexto valioso para depuração ou análise do comportamento do contêiner. Checkout para commit anterior

Análise Multi-Imagens

Ao trabalhar com múltiplas imagens de contêiner que compartilham uma ancestralidade comum, o OCI2Git cria inteligentemente branches apenas quando as imagens realmente divergem. Isso permite que você analise múltiplas imagens relacionadas em um único repositório, preservando seu histórico comum.

# 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

O OCI2Git detecta automaticamente camadas compartilhadas entre imagens e cria uma estrutura de ramificação que reflete sua base comum. O histórico do Git mostrará:

Esta abordagem é especialmente valiosa para: Estrutura de repositório multiimagem mostrando base compartilhada e ramos divergentes

Casos de Uso Adicionais

Instalação

A Partir do Código-Fonte

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

Install locally

cargo install --path .

Do Crates.io

cargo install oci2git

Uso

oci2git [OPTIONS] 

Argumentos: Nome da imagem para converter (ex.: 'ubuntu:latest') ou caminho para o arquivo tar ao usar o motor tar

Opções: -o, --output Diretório de saída para o repositório Git [padrão: ./container_repo] -e, --engine Motor de container a ser usado (docker, nerdctl, tar) [padrão: docker] -h, --help Exibe informações de ajuda -V, --version Exibe informações de versão

Variáveis de Ambiente: TMPDIR Defina esta variável de ambiente para alterar o local padrão usado para processamento de dados intermediários. Isso depende da plataforma (ex.: TMPDIR no Unix/macOS, TEMP ou TMP no Windows).

Exemplos

Usando o motor Docker (padrão):

oci2git -o ./ubuntu-repo ubuntu:latest
Usando um tarball de imagem já baixado:

oci2git -e tar -o ./ubuntu-repo /path/to/ubuntu-latest.tar
O mecanismo tar espera um arquivo tarball válido no formato OCI, que normalmente é criado com 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

Isso criará um repositório Git em ./ubuntu-repo contendo:

O histórico do Git reflete o histórico de camadas do contêiner:

Estrutura do Repositório

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

Requisitos

Licença

MIT

[documentação]: https://docs.rs/oci2git/

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