लघु उत्तर (टीएल; डीआर)
"ट्री-ईश" एक शब्द है जो किसी भी पहचानकर्ता को संदर्भित करता है (जैसा कि गिट संशोधन दस्तावेजों में निर्दिष्ट है ) जो अंततः एक (उप) निर्देशिका पेड़ की ओर जाता है (गिट "निर्देशिकाओं को" पेड़ "और" ट्री ऑब्जेक्ट्स "के रूप में संदर्भित करता है)।
मूल पोस्टर के मामले में, foo
एक निर्देशिका है जिसे वह निर्दिष्ट करना चाहता है। Git में उप (उप) निर्देशिका निर्दिष्ट करने का सही तरीका इस "ट्री-ईश" सिंटैक्स ( Git के संशोधन दस्तावेज़ से आइटम # 15 ) का उपयोग करना है:
<rev>:<path>
जैसे HEAD:README
, :README
,master:./README
एक प्रत्यय :
जिस पथ के नाम पर होता है वह बृहदान्त्र के पहले भाग द्वारा नामित ट्री-ईश ऑब्जेक्ट में दिए गए मार्ग पर बूँद या पेड़ का नाम देता है।
तो, दूसरे शब्दों में, master:foo
सही वाक्यविन्यास है, नहीं master/foo
।
अन्य "ट्री-ईश" (प्लस कमिट-ईश)
यहाँ कमिट-ईश और ट्री- आइश आइडेंटिअर्स की पूरी सूची दी गई है ( Git रिवीजन डॉक्यूमेंटेशन से , इसे इंगित करने के लिए LopSae के लिए धन्यवाद ):
----------------------------------------------------------------------
| Commit-ish/Tree-ish | Examples
----------------------------------------------------------------------
| 1. <sha1> | dae86e1950b1277e545cee180551750029cfe735
| 2. <describeOutput> | v1.7.4.2-679-g3bee7fb
| 3. <refname> | master, heads/master, refs/heads/master
| 4. <refname>@{<date>} | master@{yesterday}, HEAD@{5 minutes ago}
| 5. <refname>@{<n>} | master@{1}
| 6. @{<n>} | @{1}
| 7. @{-<n>} | @{-1}
| 8. <refname>@{upstream} | master@{upstream}, @{u}
| 9. <rev>^ | HEAD^, v1.5.1^0
| 10. <rev>~<n> | master~3
| 11. <rev>^{<type>} | v0.99.8^{commit}
| 12. <rev>^{} | v0.99.8^{}
| 13. <rev>^{/<text>} | HEAD^{/fix nasty bug}
| 14. :/<text> | :/fix nasty bug
----------------------------------------------------------------------
| Tree-ish only | Examples
----------------------------------------------------------------------
| 15. <rev>:<path> | HEAD:README, :README, master:./README
----------------------------------------------------------------------
| Tree-ish? | Examples
----------------------------------------------------------------------
| 16. :<n>:<path> | :0:README, :README
----------------------------------------------------------------------
आइडेंटिफ़ायर # 1-14 सभी "कमिट-ईश" हैं, क्योंकि वे सभी कमिट करने के लिए नेतृत्व करते हैं, लेकिन क्योंकि कमिट्स डायरेक्टरी ट्री की ओर भी इशारा करते हैं, वे सभी अंततः (सब) डायरेक्टरी ट्री ऑब्जेक्ट्स की ओर जाते हैं, और इसलिए उन्हें "ट्री" के रूप में भी इस्तेमाल किया जा सकता है -ish "।
# 15 का उपयोग ट्री-ईश के रूप में भी किया जा सकता है जब यह एक (उप) निर्देशिका को संदर्भित करता है, लेकिन इसका उपयोग विशिष्ट फ़ाइलों की पहचान करने के लिए भी किया जा सकता है। जब यह फ़ाइलों को संदर्भित करता है, तो मुझे यकीन नहीं है कि यह अभी भी "ट्री-ईश" माना जाता है, या यदि "बूँद-ईश" की तरह कार्य करता है (Git फ़ाइलों को "ब्लॉब्स" के रूप में संदर्भित करता है)।
दीर्घ उत्तर
अपने न्यूनतम स्तरों पर, Git चार मूलभूत वस्तुओं का उपयोग करके स्रोत कोड का ट्रैक रखता है:
- एनोटेट टैग, जो इंगित करता है।
- Commits, जो आपके प्रोजेक्ट के रूट डायरेक्टरी ट्री को इंगित करता है।
- पेड़, जो निर्देशिका और उपनिर्देशिका हैं।
- बूँदें, जो फाइलें हैं।
इन ऑब्जेक्ट्स में से प्रत्येक की अपनी स्वयं की sha1 हैश आईडी है, क्योंकि Linus Torvalds ने Git को एक सामग्री- पता करने योग्य फाइल सिस्टम की तरह डिज़ाइन किया है , अर्थात फ़ाइलों को उनकी सामग्री के आधार पर पुनर्प्राप्त किया जा सकता है (sha1 ID फ़ाइल सामग्री से उत्पन्न होती है)। प्रो गिट पुस्तक इस उदाहरण आरेख देता है :

कई Git कमांड कमिट और (उप) डायरेक्टरी ट्री के लिए विशेष पहचानकर्ता स्वीकार कर सकते हैं:
"कमिट-ईश" पहचानकर्ता हैं जो अंततः एक प्रतिबद्ध वस्तु का नेतृत्व करते हैं। उदाहरण के लिए,
tag -> commit
"ट्री-ईश" पहचानकर्ता हैं जो अंततः पेड़ (यानी निर्देशिका) वस्तुओं की ओर ले जाते हैं।
tag -> commit -> project-root-directory
क्योंकि प्रतिबद्ध वस्तुएं हमेशा एक निर्देशिका ट्री ऑब्जेक्ट (आपकी परियोजना की मूल निर्देशिका) को इंगित करती हैं, कोई भी पहचानकर्ता जो "प्रतिबद्ध-ईश" है, परिभाषा के अनुसार, "ट्री-ईश" भी है। दूसरे शब्दों में, किसी भी पहचानकर्ता जो एक प्रतिबद्ध वस्तु की ओर जाता है, का उपयोग एक (उप) डायरेक्टरी ट्री ऑब्जेक्ट का नेतृत्व करने के लिए भी किया जा सकता है ।
लेकिन चूंकि डाइरेक्ट ट्री ऑब्जेक्ट्स कभी भी Git के वर्जनिंग सिस्टम में कमिट करने की ओर इशारा नहीं करते हैं, न कि प्रत्येक पहचानकर्ता जो एक (सब) डायरेक्टरी ट्री की ओर इशारा करता है, उसे कमिट करने के लिए भी इस्तेमाल किया जा सकता है। दूसरे शब्दों में, "कमिट-ईश" पहचानकर्ताओं का सेट "ट्री-ईश" पहचानकर्ताओं के सेट का एक सख्त उपसमुच्चय है।
जैसा कि प्रलेखन में समझाया गया है ( मुझे खोजने में मदद करने के लिए ट्रेबोर का धन्यवाद ):
<tree>
एक ट्री ऑब्जेक्ट नाम इंगित करता है।
<commit>
एक प्रतिबद्ध वस्तु नाम इंगित करता है।
<tree-ish>
एक पेड़, कमिट या ऑब्जेक्ट नाम का संकेत देता है। एक कमांड जो एक <tree-ish>
तर्क लेता है, अंततः एक <tree>
वस्तु पर काम करना चाहता है, लेकिन स्वचालित रूप से dereferences <commit>
और <tag>
ऑब्जेक्ट जो एक बिंदु पर होते हैं <tree>
।
<commit-ish>
एक प्रतिबद्ध या टैग ऑब्जेक्ट नाम इंगित करता है। एक कमांड जो एक <commit-ish>
तर्क लेता है, अंततः एक <commit>
ऑब्जेक्ट पर काम करना चाहता है, लेकिन स्वचालित रूप से <tag>
ऑब्जेक्ट्स को इंगित करता है जो ए पर इंगित करता है <commit>
।
कि पेड़-ish पहचानकर्ता के सेट के रूप में इस्तेमाल नहीं किया जा सकता प्रतिबद्ध-ish हैं
<rev>:<path>
है, जो सुराग सीधे निर्देशिका के पेड़ के लिए, वस्तुओं का वायदा नहीं किया। उदाहरण के लिए, HEAD:subdirectory
।
निर्देशिका वृक्ष वस्तुओं के Sha1 पहचानकर्ता ।
master:foo
ट्री-ईश है, लेकिन आप बेहतर उपयोग करते हैंmaster foo
जैसे मैं<tree-ish> <path>
।