Web Analytics

oci2git

⭐ 374 stars Hindi by Virviil

🌐 भाषा

OCI2Git

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

डाउनलोड्स

[//]: # (mock for future 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 रिपॉजिटरी में बदलता है। प्रत्येक कंटेनर लेयर को एक 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 इतिहास में दिखाई देगा: यह दृष्टिकोण विशेष रूप से इन कार्यों के लिए उपयोगी है: साझा बेस और विभाजित शाखाओं के साथ मल्टी-इमेज रिपॉजिटरी संरचना

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

इंस्टॉलेशन

स्रोत से

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

Install locally

cargo install --path .

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

cargo install oci2git

उपयोग

oci2git [OPTIONS] 

आर्ग्युमेंट्स: कनवर्ट करने के लिए इमेज नाम (जैसे, 'ubuntu:latest') या टार इंजन का उपयोग करते समय टारबॉल का पथ

विकल्प: -o, --output Git रिपोजिटरी के लिए आउटपुट डायरेक्टरी [डिफ़ॉल्ट: ./container_repo] -e, --engine उपयोग करने के लिए कंटेनर इंजन (docker, nerdctl, tar) [डिफ़ॉल्ट: docker] -h, --help मदद जानकारी प्रिंट करें -V, --version संस्करण जानकारी प्रिंट करें

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

उदाहरण

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

oci2git -o ./ubuntu-repo ubuntu:latest

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

oci2git -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 -e tar -o ./ubuntu-repo ubuntu-latest.tar
यह ./ubuntu-repo में एक Git रिपॉजिटरी बनाएगा जिसमें शामिल हैं: Git इतिहास कंटेनर की लेयर हिस्ट्री को दर्शाता है:

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

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: 2025-12-12 ---