Web Analytics

oci2git

⭐ 401 stars Hindi by Virviil

🌐 भाषा

OCI2Git

[प्रलेखन][documentation] Crates.io लाइसेंस

डाउनलोड

[//]: # (भविष्य के 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))

एक Rust एप्लिकेशन जो कंटेनर इमेजेज़ (Docker, आदि) को Git रिपॉजिटरीज़ में बदलता है, और YAML में फाइल सिस्टम बिल ऑफ मटेरियल्स (fsbom) उत्पन्न करता है। प्रत्येक कंटेनर लेयर को एक Git कमिट के रूप में दर्शाया जाता है, जिससे मूल इमेज का इतिहास और संरचना बनी रहती है।

OCI2Git द्वारा nginx इमेज को बदलने का डेमो

विशेषताएँ

उपयोग के मामले

लेयर डिफिंग

जब कंटेनर समस्याओं का समाधान किया जा रहा हो, तो आप Git की शक्तिशाली डिफिंग क्षमताओं का उपयोग करके यह सटीक रूप से पता लगा सकते हैं कि किन दो लेयरों के बीच क्या बदला। git diff कमिट्स के बीच चलाकर, इंजीनियर देख सकते हैं कि कौन सी फाइलें जोड़ी गईं, संशोधित हुईं या हटाई गईं, जिससे प्रत्येक Dockerfile निर्देश का प्रभाव समझना और समस्याग्रस्त बदलाव ढूँढ़ना बहुत आसान हो जाता है। लेयर डिफ का उदाहरण

उत्पत्ति ट्रैकिंग

git blame का उपयोग करके, डेवलपर्स जल्दी से पता लगा सकते हैं कि कौन सी लेयर ने किसी विशिष्ट फाइल या कोड की पंक्ति को जोड़ा। यह विशेष रूप से तब मूल्यवान होता है जब कॉन्फ़िगरेशन फाइलों या डिपेंडेंसीज़ की समस्याओं का निदान किया जाता है। प्रत्येक लेयर को मैन्युअली निरीक्षण करने के बजाय, आप तुरंत किसी भी फाइल की उत्पत्ति उसके स्रोत लेयर और संबंधित Dockerfile निर्देश तक ट्रेस कर सकते हैं।

फाइल लाइफसाइकल ट्रैकिंग

OCI2Git आपको किसी विशिष्ट फाइल की यात्रा को पूरे कंटेनर इमेज के इतिहास में फॉलो करने में सक्षम बनाता है। आप देख सकते हैं कि कोई फाइल पहली बार कब बनाई गई, विभिन्न लेयरों में उसमें कैसे बदलाव हुए, और यदि/कब वह अंततः हटा दी गई। यह व्यापक दृश्य फाइल के विकास को समझने में मदद करता है, बिना दर्जनों लेयरों के परिवर्तनों को मैन्युअली ट्रैक किए।

अपने कंटेनर इमेज में किसी फाइल का इतिहास ट्रैक करने के लिए — जिसमें यह भी शामिल है कि वह पहली बार कब आई, कब बदली गई या हटाई गई — आप रूपांतरण के बाद ये Git कमांड्स उपयोग कर सकते हैं:

# 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
ये कमांड्स किसी भी फाइल के पूरे इतिहास को कंटेनर लेयरों में ट्रेस करना आसान बनाती हैं, बिना मैन्युअली लेयर टारबॉल्स को निकालने और तुलना करने की जटिलता के।

मल्टी-लेयर विश्लेषण

कभी-कभी सबसे महत्वपूर्ण तुलना तब मिलती है जब आप कई गैर-क्रमागत लेयरों में हुए बदलावों की जांच करते हैं। OCI2Git के साथ, आप Git के तुलना टूल का उपयोग करके देख सकते हैं कि विभिन्न बिल्ड स्टेजों में घटक कैसे विकसित हुए, जिससे ऐसे पैटर्न पहचाने जा सकते हैं जो केवल आस-पास की लेयरों को देखने पर दिखाई नहीं देते।

लेयर अन्वेषण

git checkout का उपयोग करके किसी भी विशिष्ट कमिट पर जाकर आप कंटेनर फाइल सिस्टम को ठीक वैसे ही देख सकते हैं जैसा वह उस लेयर पर था। इससे डेवलपर्स किसी भी बिंदु पर इमेज के निर्माण प्रक्रिया में फाइलों और डाइरेक्टरीज़ की सही स्थिति का निरीक्षण कर सकते हैं, जो डिबगिंग या कंटेनर व्यवहार की जांच करते समय अमूल्य संदर्भ प्रदान करता है। पिछले कमिट पर चेकआउट करें

मल्टी-इमेज विश्लेषण

जब आप कई कंटेनर इमेज के साथ काम करते हैं जिनका साझा पूर्वज होता है, तो OCI2Git केवल तब ब्रांच बनाता है जब इमेज वास्तव में अलग हो जाती हैं। इससे आप एक ही रिपॉजिटरी में कई संबंधित इमेज का विश्लेषण कर सकते हैं, जबकि उनके साझा इतिहास को बनाए रख सकते हैं।

# 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 स्वचालित रूप से छवियों के बीच साझा परतों का पता लगाता है और एक शाखा संरचना बनाता है जो उनके सामान्य आधार को दर्शाती है। Git इतिहास में दिखाई देगा: यह दृष्टिकोण विशेष रूप से इन के लिए मूल्यवान है: मल्टी-इमेज रिपॉजिटरी संरचना जिसमें साझा आधार और अलग-अलग शाखाएँ दिखाई गई हैं

अतिरिक्त उपयोग के मामले

स्थापना

पैकेज प्रबंधक

#### macOS / Linux (Homebrew)

brew tap virviil/oci2git
brew install oci2git

#### डेबियन / उबुन्टू

नवीनतम रिलीज़ से .deb पैकेज डाउनलोड करें और इंस्टॉल करें:

# For amd64 (x86_64)
wget https://github.com/virviil/oci2git/releases/latest/download/oci2git_VERSION_amd64.deb
sudo dpkg -i oci2git_VERSION_amd64.deb

For arm64

wget https://github.com/virviil/oci2git/releases/latest/download/oci2git_VERSION_arm64.deb sudo dpkg -i oci2git_VERSION_arm64.deb

#### आर्च लिनक्स (AUR)

# Using yay
yay -S oci2git-bin

Using paru

paru -S oci2git-bin

Manual installation

git clone https://aur.archlinux.org/oci2git-bin.git cd oci2git-bin makepkg -si

पूर्व-निर्मित बाइनरी

अपने प्लेटफ़ॉर्म के लिए उपयुक्त बाइनरी नवीनतम रिलीज़ से डाउनलोड करें:

# 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/oci2git

macOS (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/oci2git

क्रेट्स.आईओ से

cargo install oci2git

स्रोत से

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

Install locally

cargo install --path .

उपयोग

oci2git [OPTIONS] 
oci2git convert [OPTIONS] 
oci2git fsbom [OPTIONS] 

convert — OCI इमेज → Git रिपॉजिटरी

oci2git convert [OPTIONS] 

or simply:

oci2git

विकल्प: -o, --output Git रिपॉजिटरी के लिए आउटपुट डायरेक्टरी [डिफ़ॉल्ट: ./container_repo] -e, --engine उपयोग करने के लिए कंटेनर इंजन (docker, nerdctl, tar) [डिफ़ॉल्ट: docker] -v, --verbose वर्बोज़ मोड (-v सूचना के लिए, -vv डिबग के लिए, -vvv ट्रेस के लिए)

fsbom — फाइल सिस्टम बिल ऑफ मैटेरियल्स

oci2git fsbom [OPTIONS] 
विकल्प: -o, --output YAML BOM फाइल के लिए आउटपुट पथ [डिफ़ॉल्ट: ./fsbom.yml] -e, --engine उपयोग करने के लिए कंटेनर इंजन (docker, nerdctl, tar) [डिफ़ॉल्ट: docker] -v, --verbose वर्बोज़ मोड (-v जानकारी के लिए, -vv डिबग के लिए, -vvv ट्रेस के लिए)

पर्यावरण वेरिएबल्स: TMPDIR इस पर्यावरण वेरिएबल को सेट करके इंटरमीडिएट डेटा प्रोसेसिंग के लिए डिफ़ॉल्ट लोकेशन बदलें। यह प्लेटफॉर्म-निर्भर है (जैसे, यूनिक्स/macOS पर TMPDIR, Windows पर TEMP या TMP).

उदाहरण

कन्वर्ट करें

डॉकर इंजन का उपयोग करते हुए (डिफ़ॉल्ट):

oci2git ubuntu:latest

or explicitly:

oci2git convert ubuntu:latest -o ./ubuntu-repo

पहले से डाउनलोड की गई इमेज टारबॉल का उपयोग करना:

oci2git convert -e tar -o ./ubuntu-repo /path/to/ubuntu-latest.tar
टार इंजन एक वैध OCI फॉर्मेट टारबॉल की अपेक्षा करता है, जिसे आमतौर पर 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 convert -e tar -o ./ubuntu-repo ubuntu-latest.tar
यह ./ubuntu-repo में एक Git रिपॉजिटरी बनाएगा जिसमें निम्नलिखित शामिल होंगे: Git इतिहास कंटेनर की लेयर इतिहास को दर्शाता है:

फ़ाइल सिस्टम बिल ऑफ़ मटेरियल्स (fsbom)

प्रत्येक लेयर में जोड़ी गई या संशोधित प्रत्येक फ़ाइल की YAML सूची तैयार करें:

oci2git fsbom ubuntu:latest -o ubuntu.yml

एक टारबॉल का उपयोग करना:

oci2git fsbom -e tar image.tar -o image-bom.yml
आउटपुट YAML प्रत्येक लेयर को उसकी प्रविष्टियों के साथ सूचीबद्ध करता है, जिन्हें प्रकार (file, hardlink, symlink, directory) और स्थिति (n:uid:gid नया के लिए, m:uid:gid संशोधित के लिए) द्वारा टैग किया गया है। हटाए गए फाइलें (OCI व्हाइटआउट्स) को बाहर रखा गया है।

layers:
  
  • index: 0
command: "ADD rootfs.tar.gz / # buildkit" digest: "sha256:45f3ea58..." entries:
  • type: file
path: "bin/busybox" size: 919304 mode: 493 stat: "n:0:0"
  • type: hardlink
path: "bin/sh" target: "bin/busybox" stat: "n:0:0"
  • type: symlink
path: "lib64" target: "lib" stat: "n:0:0"
  • index: 1
command: "RUN apk add --no-cache curl" digest: "sha256:..." entries:
  • type: file
path: "usr/bin/curl" size: 204800 mode: 493 stat: "n:0:0"
  • type: file
path: "etc/apk/world" size: 32 mode: 420 stat: "m:0:0"

रिपॉजिटरी संरचना

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

आवश्यकताएँ

लाइसेंस

MIT

[प्रलेखन]: https://docs.rs/oci2git/

--- Tranlated By Open Ai Tx | Last indexed: 2026-04-02 ---