2009-10-07 13 views
15

का उपयोग कर ओएस एक्स टर्मिनल का उपयोग करते हुए बिना Git वस्तुओं और सूचकांक देखने पर,कैसे Git

कैसे एक आप सादे पाठ के रूप में इन फ़ाइलों की सामग्री को देखने?

+0

इन फ़ाइलों को स्वाभाविक सादे-पाठ नहीं कर रहे हैं, और उन्हें इस तरह के रूप को देखने के लिए, आप एक प्रोग्राम है जो पाठ में अपने स्वरूप से उन्हें धर्मान्तरित की जरूरत है। गिट एक ऐसा प्रोग्राम है जो सटीक रूप से करने के लिए डिज़ाइन किए गए घटकों के साथ है। अगर किसी ने किसी और को लिखा है तो मैं बेहद आश्चर्यचकित हूं। – Cascabel

+0

तो ऑब्जेक्ट्स (विशेष रूप से प्रतिबद्ध वस्तुएं) सादा पाठ में परिवर्तित नहीं होंगे? –

+0

वे * कम से कम * zlib (deflate) संपीड़न का उपयोग कर संपीड़ित हैं। –

उत्तर

9

“Object storage format” in Git User Manual पर देखें।

यह zlib का उपयोग कर कच्चा संकुचित डेटा है। कोई 'zlib1g-dev' पैकेज से zpipe का उपयोग कर सकता है। के साथ the example संकलित करें। यह मानक .gz या कुछ नहीं है।

./zpipe -d < .git/objects/02/43019ddb4d94114e5a8580eec01baeea195133 

प्रिंट ब्लॉब की सामग्री (हैडर + डेटा)

आप SHA-1 की जांच करना चाहते हैं, तो आप एक फ़ाइल (myblob) में असम्पीडित ब्लॉब रख दिया और क्या करना है

sha1sum myblob 
+0

दुर्भाग्यवश, यह पैक की गई वस्तुओं के लिए काम नहीं करता है (वाले जो थोड़ी देर के लिए भंडार में रहे हैं)। –

+1

क्या आपका मतलब है कि ऑब्जेक्ट फ़ाइलों में केवल डिफ्लेट पेलोड होता है, और अन्य मेटाडेटा फ़ील्ड्स में निर्दिष्ट नहीं है: https://www.ietf.org/rfc/rfc1952.txt, इसलिए यही कारण है कि 'gunzip' काम नहीं करेगा ? –

10

यदि आप गिट ऑब्जेक्ट्स (कमेट्स और/या ब्लॉब्स यानी फाइल सामग्री) के सादे पाठ रूप को देखना चाहते हैं तो बिना गिट का उपयोग करके, यह आसान नहीं होगा, खासकर यदि भंडार पैक किया गया हो। क्या आप अपनी होम निर्देशिका (या मैकोज़ एक्स पर इसके बराबर) में स्थानीय रूप से गिट स्थापित नहीं कर सकते?

के लिए प्रारूप ऑब्जेक्ट्स, .git/objects/ प्रशंसक-आउट निर्देशिका में फ़ाइलों के रूप में संग्रहीत, उदा। .git/objects/02/43019ddb4d94114e5a8580eec01baeea195133 (प्रशंसक-आउट निर्देशिका और फ़ाइल नाम फॉर्म वस्तु का SHA-1 पहचानकर्ता), वर्णित है उदा। "गिट कम्युनिटी बुक" के Chapter 9.2 "Git Objects" "प्रो गिट" पुस्तक (मुफ्त में ऑनलाइन उपलब्ध) और Chapter 7.1 "How Git Stores Objects" में।

पैक प्रारूप, जहां वस्तुओं का सेट .git/objects/pack/ में एकल फ़ाइल में संग्रहीत किया जाता है, उदा। .git/objects/pack/pack-1db7aa96d95149a4dd341490a3594181a24415ee.pack, Documentation/technical/pack-format.txt में और "Git समुदाय पुस्तक" Chapter 7.5 "The Packfile" में वर्णित (और "प्रो Git" Chapter 9.4 "Packfiles" में उल्लेख किया है)


लिए प्रतिबद्ध, एक नज़र .git/HEAD फ़ाइल पर पहले ले खोजने के लिए नवीनतम जानना चाहते हैं तो कर रहा है वर्तमान शाखा यह निम्न की तरह कुछ शामिल होगा:

ref: refs/heads/master 

(अगर यह SHA-1 में शामिल है, तो आप इसे पिछले की आईडी के रूप में ले जा सकते हैं के लिए प्रतिबद्ध है, और एक कदम को छोड़)। फिर उदा। जांचें शाखा को इंगित करने के लिए .git/refs/heads/master। इसमें एक प्रतिबद्धता के SHA-1 शामिल होंगे, उदाहरण:

dbc1b1f71052c084a84b5c395e1cb4b5ae526fcb 

अंतिम (सबसे हालिया) प्रतिबद्धता शायद ढीले प्रारूप में होगी; इस उदाहरण में यह .git/objects/db/c1b1f71052c084a84b5c395e1cb4b5ae526fcb फ़ाइल में होगा।

8

मैं आपके प्रश्न को एक अलग तरीके से समझने जा रहा हूं। यदि आप समझना चाहते हैं कि ऑब्जेक्ट्स फाइलें क्या हैं, तो आप इतिहास लॉग को नेविगेट किए बिना या गिट चेकआउट, डिफ इत्यादि का उपयोग किए बिना सीधे उन्हें देखने के लिए गिट का उपयोग कर सकते हैं।

फ़ाइल .git/objects/04/a42e9a7282340ef0256eaa6d59254227b8b141

भागो आदेश

git show 04a42e 

जो /04/ से 04 और शेष संख्या a42e के पहले चार वर्णों को जोड़ती है के लिए: उदाहरण के लिए।

> git show 04a42e 
commit 04f7db976fa54c72fcc6350dd7d0aa06cb249df6 
Author: Alex Brown <[email protected]> 
Date: Fri Jan 8 11:02:21 2010 +0000 
a text file 

diff --git a/1.txt b/1.txt 
new file mode 100644 
index 0000000..04a42e9 
--- /dev/null 
+++ b/1.txt 
@@ -0,0 +1,3 @@ 
+Woo 
+# boo 
+# choo 

यह एक एक प्रतिबद्ध, अन्य वस्तुओं फ़ाइल धब्बे, पेड़, आदि

+0

यह * कुछ * प्रश्न: पी के लिए एक अच्छा जवाब की तरह लगता है –

12
alias deflate="perl -MCompress::Zlib -e 'undef $/; print uncompress(<>)'" 

deflate .git/objects/4b/3083256dedabd68e839d7717aa785424119990 | sha1sum 
4b3083256dedabd68e839d7717aa785424119990 - 
0

सूचकांक .git/index के तहत संग्रहीत किया जाता है हो सकता है।

यह एक बाइनरी असम्पीडित प्रारूप है जो https://github.com/git/git/blob/master/Documentation/technical/index-format.txt पर निर्दिष्ट है, इसलिए इसे पढ़ने का एकमात्र तरीका hd जैसे टूल के साथ है।

index फ़ाइल में इनोड, अनुमतियों और संशोधन समय सहित उनके मेटाडेटा वाली फ़ाइलों की एक सूची है। इसमें सामग्री का SHA-1 भी शामिल है, जिसे किसी ऑब्जेक्ट के रूप में संग्रहीत किया जाता है, जिसका अर्थ है कि जब आप git add करते हैं तो यह नई ऑब्जेक्ट्स बना सकता है।

मैं आपको git init init && cd init && echo a > a && git add a, और फिर hd .git/index जैसे फ़ील्ड फ़ील्ड को सत्यापित करने के लिए एक सरल परीक्षण रेपो बनाने के लिए प्रोत्साहित करता हूं।

निम्नलिखित प्रश्न सूचकांक पर अधिक ध्यान केंद्रित: What does the git index contain EXACTLY?