
OCI2Git
[//]: # (mock para futuro test.yaml) [//]: # ([](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.

Funcionalidades
- Analisa imagens Docker e extrai informações das camadas
- Cria um repositório Git onde cada camada da imagem é representada como um commit
- Suporte para camadas vazias (ENV, WORKDIR, etc.) como commits vazios
- Extração completa de metadados para o formato Markdown
- Arquitetura extensível para suportar diferentes engines de contêiner
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. Executandogit 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.

Rastreio de Origem
Usandogit 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/pathFirst appearance (i.e. creation) - see which layer introduced the file
git log --diff-filter=A -- /rootfs/my/file/pathAll changes made to the file (with diffs)
git log -p --follow -- /rootfs/my/file/pathWhen the file was deleted
git log --diff-filter=D -- /rootfs/my/file/pathShow short commit info (concise layer history)
git log --follow --oneline -- /rootfs/my/file/pathEsses 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 utilizargit 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.

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 alpConvert 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á:
- Um tronco comum contendo todas as camadas compartilhadas
- Ramificações separadas que divergem apenas quando as imagens realmente diferem
- Visualização clara de onde as imagens compartilham ancestralidade comum versus onde se tornam únicas
- Manipulação inteligente de duplicatas: se exatamente a mesma imagem for processada duas vezes, o algoritmo detecta isso antes do commit final de metadados e evita criar uma ramificação duplicada
- Análise de Família de Imagens: Entender como diferentes variantes de uma imagem (diferentes versões, arquiteturas ou configurações) se relacionam entre si
- Impacto da Imagem Base: Ver exatamente como alterações em uma imagem base afetam múltiplas imagens derivadas
- Oportunidades de Otimização: Identificar componentes compartilhados que poderiam ser melhor aproveitados entre variantes de imagens

Casos de Uso Adicionais
- Auditoria de Segurança: Identificar exatamente quando pacotes ou configurações vulneráveis foram introduzidos e rastreá-los até instruções de build específicas.
- Otimização de Imagem: Analisar estruturas de camadas para encontrar operações redundantes ou arquivos grandes que poderiam ser consolidados, ajudando a reduzir o tamanho da imagem.
- Gerenciamento de Dependências: Monitorar quando dependências foram adicionadas, atualizadas ou removidas ao longo do histórico da imagem.
- Aprimoramento do Processo de Build: Examinar a composição das camadas para otimizar instruções do Dockerfile visando melhor cache e menor tamanho de imagem.
- Comparação Entre Imagens: Converter múltiplas imagens relacionadas em repositórios Git e usar as ferramentas de comparação do Git para analisar suas diferenças e semelhanças.
Instalação
Gerenciadores de Pacotes
#### macOS / Linux (Homebrew)
brew tap virviil/oci2git
brew install oci2git#### Debian / Ubuntu
Baixe e instale o pacote .deb da versão mais recente:
# For amd64 (x86_64)
wget https://github.com/virviil/oci2git/releases/latest/download/oci2git_VERSION_amd64.deb
sudo dpkg -i oci2git_VERSION_amd64.debFor arm64
wget https://github.com/virviil/oci2git/releases/latest/download/oci2git_VERSION_arm64.deb
sudo dpkg -i oci2git_VERSION_arm64.deb#### Arch Linux (AUR)
# Using yay
yay -S oci2git-binUsing paru
paru -S oci2git-binManual installation
git clone https://aur.archlinux.org/oci2git-bin.git
cd oci2git-bin
makepkg -siBinários Pré-compilados
Baixe o binário apropriado para sua plataforma na última versão:
# Linux x86_64
wget https://github.com/virviil/oci2git/releases/latest/download/oci2git-linux-x86_64.tar.gz
tar xzf oci2git-linux-x86_64.tar.gz
sudo mv oci2git-linux-x86_64 /usr/local/bin/oci2git
chmod +x /usr/local/bin/oci2gitmacOS (Apple Silicon)
wget https://github.com/virviil/oci2git/releases/latest/download/oci2git-darwin-aarch64.tar.gz
tar xzf oci2git-darwin-aarch64.tar.gz
sudo mv oci2git-darwin-aarch64 /usr/local/bin/oci2git
chmod +x /usr/local/bin/oci2gitDo Crates.io
cargo install oci2gitDa Fonte
# Clone the repository
git clone https://github.com/virviil/oci2git.git
cd oci2gitInstall locally
cargo install --path .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:latestConvert the tarball to a Git repository
oci2git -e tar -o ./ubuntu-repo ubuntu-latest.tarIsso criará um repositório Git em ./ubuntu-repo contendo:
Image.md- Metadados completos sobre a imagem em formato Markdownrootfs/- O conteúdo do sistema de arquivos do contêiner
- O primeiro commit contém apenas o arquivo
Image.mdcom todos os metadados - Cada commit subsequente representa uma camada da imagem original
- Os commits incluem o comando do Dockerfile como mensagem do commit
Estrutura do Repositório
repository/
├── .git/
├── Image.md # Complete image metadata
└── rootfs/ # Filesystem content from the container
Requisitos
- Rust edição 2021
- Docker CLI (para suporte ao mecanismo Docker)
- Git
Licença
MIT
[documentação]: https://docs.rs/oci2git/
--- Tranlated By Open Ai Tx | Last indexed: 2026-01-30 ---