अगर कोई शॉर्टहैंड कमिट आईडी 2 अलग-अलग कमिट्स को संदर्भित कर सकती है तो क्या मुझे कोई चेतावनी देता है?


130

अगर cee1572 अलग-अलग प्रतिबद्ध आईडी का उल्लेख कर सकते हैं, जैसे

cee157eb799af829a9a0c42c0915f55cd29818d4 तथा cee1577fecf6fc5369a80bd6e926ac5f864a754b

अगर मैं टाइप करता हूं तो क्या मुझे चेतावनी देगा git log cee157? (या Git 1.8.5.2 (Apple Git-48) मुझे टाइप करने की अनुमति देता है git log cee1)।

मुझे लगता है कि यह होना चाहिए, हालांकि मुझे कोई आधिकारिक स्रोत नहीं मिल रहा है जो कहता है कि यह होगा।


4
देखें man gitrevisions, जिसका अर्थ है कि कम से कम एक चेतावनी दी जाएगी क्योंकि यह बताता है कि आप इसके पूर्ण SHA1-1 नाम के साथ एक संशोधन का नाम दे सकते हैं या "एक प्रमुख विकल्प जो कि भंडार के भीतर अद्वितीय है"।
चेपनर

5
क्या आपके पास 17 अलग-अलग कमिट हैं? बस कोशिश करो git log c... और देखो।
djechlin

1
ईएलएल में, मैं शायद इसे [सामान्य-संदर्भ] के रूप में चिह्नित
करूंगा

3
@djechlin मुझे कम से कम 4 अंक चाहिए। git log abcकहते हैं fatal: ambiguous argument 'abc': unknown revision or path not in the working tree.भले ही मैं एक अद्वितीय SHA1 के साथ शुरू की है abc। 1-2-3 अंकों के साथ काम नहीं करता है, 4 न्यूनतम लगता है। विंडोज (1.8.1) और मैक (1.9.1) में परीक्षण किया गया।
जोंस jan

4
@janos ऐसा इसलिए है क्योंकि environment.h केminimum_abbrev मान को परिभाषित करता है 4
देवनबल ull

जवाबों:


168

यह आपको कुछ इस तरह देना चाहिए:

$ git log cee157
error: short SHA1 cee157 is ambiguous.
error: short SHA1 cee157 is ambiguous.
fatal: ambiguous argument 'cee157': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

मैंने इसे इस तरह से डुप्लिकेट उपसर्गों के साथ कमिट्स पाकर, एक वास्तविक गिट रिपॉजिटरी पर परीक्षण किया:

git rev-list master | cut -c-4 | sort | uniq -c | sort -nr | head

यह संशोधन की सूची लेता है master, पहले 4 वर्णों को काटता है और बाकी को दूर फेंकता है, डुप्लिकेट की गणना करता है और संख्यात्मक रूप से सॉर्ट करता है। मेरे 1500 के अपेक्षाकृत छोटे भंडार में, मुझे एक सामान्य 4-अंकीय उपसर्ग के साथ कुछ संशोधन मिले। मैंने 4 अंकों का उपसर्ग चुना क्योंकि यह सबसे कम कानूनी लंबाई है जो गिट द्वारा समर्थित है। (अस्पष्ट नहीं होने पर भी 3 अंकों या उससे कम के साथ काम नहीं करता है।)

Btw यह एक टाइपो नहीं था, मुझे नहीं पता कि अस्पष्ट SHA1 के बारे में त्रुटि संदेश दो बार क्यों दिखाई देता है, चाहे डुप्लिकेट SHA1 की संख्या की परवाह किए बिना (2 और 3 के साथ प्रयास किया गया):

error: short SHA1 cee157 is ambiguous.
error: short SHA1 cee157 is ambiguous.

(दोनों पर stderr। दरअसल पूरा आउटपुट चालू है stderr, कुछ भी नहीं है stdout।)

विंडोज में परीक्षण किया गया:

$ git --version
git version 1.8.1.msysgit.1

मुझे लगता है कि यह कहना सुरक्षित है कि यदि आपका संस्करण> = 1.8.1 है, तो गिट आपको डुप्लिकेट की चेतावनी देगा । (यह डुप्लिकेट के साथ काम करने से इनकार कर देगा।) मुझे लगता है कि बहुत पुराने संस्करणों ने इस तरह से भी काम किया।

अपडेट करें

यह परीक्षण करते समय, आपको पर्यावरण की वजह से न्यूनतम 4 अंकों वाले SHA1 की आवश्यकता int minimum_abbrev = 4होती है । (इस ओर इशारा करने के लिए @devnull धन्यवाद !)


5
क्या दो बार मिलान उपसर्गों के साथ दो से अधिक कमिट होने पर भी त्रुटि दिखाई देती है?
नित

4
@ हाँ, जब 3 डुप्लिकेट हैं, तब भी संदेश दो बार दिखाई देता है। स्पष्ट करने के लिए मेरे उत्तर को अपडेट किया।
जानोस

1
गिट स्रोत कोड की संरचना को देखते हुए, ऐसा लगता है कि दो आउटपुट में से एक चेतावनी है, और दूसरा एक त्रुटि है। हालांकि कुछ निश्चित नहीं है।
इजाकाता

1
@ मार्खर दोनों को स्टैडर पर। वास्तव में पूरा उत्पादन stderr पर है, stdout पर कुछ भी नहीं। (जो समझ में आता है)
जोंस '

63

मूल पोस्टर में कहा गया है:

मुझे लगता है कि यह होना चाहिए, हालांकि मुझे कोई आधिकारिक स्रोत नहीं मिल रहा है जो कहता है कि यह होगा।

आधिकारिक स्रोत स्रोत कोड में पाया जा सकता है get_short_sha1()

इसे उद्धृत करते हुए :

if (!quietly && (status == SHORT_NAME_AMBIGUOUS))
    return error("short SHA1 %.*s is ambiguous.", len, hex_pfx);

और यह :

if (!ds->candidate_checked)
    /*
     * If this is the only candidate, there is no point
     * calling the disambiguation hint callback.
     *
     * On the other hand, if the current candidate
     * replaced an earlier candidate that did _not_ pass
     * the disambiguation hint callback, then we do have
     * more than one objects that match the short name
     * given, so we should make sure this one matches;
     * otherwise, if we discovered this one and the one
     * that we previously discarded in the reverse order,
     * we would end up showing different results in the
     * same repository!
     */
    ds->candidate_ok = (!ds->disambiguate_fn_used ||
                        ds->fn(ds->candidate, ds->cb_data));

if (!ds->candidate_ok)
    return SHORT_NAME_AMBIGUOUS;

इसके अलावा, परीक्षण यह सुनिश्चित करने के लिए भी मौजूद हैं कि यह सुविधा अपेक्षित रूप से काम करती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.