git - गिट में वर्तमान प्रतिबद्धता के लिए हैश को कैसे पुनर्प्राप्त करें?




tfs tfs-workitem (12)

मैं टीएफएस में संग्रहीत कार्यप्रवाहों में गिट परिवर्तनों को जोड़ने की क्षमता (अभी के लिए) रखना चाहता हूं।

मैंने पहले से ही एक उपकरण लिखा है (गिट से एक हुक का उपयोग करके) जिसमें मैं गिट चेंजेट के संदेश में वर्कमेंटिमेन्टिफायर इंजेक्ट कर सकता हूं।

हालांकि, मैं एक कस्टम टीएफएस वर्कटाइम फ़ील्ड में गिट प्रतिबद्ध (हैश) के पहचानकर्ता को भी स्टोर करना चाहता हूं। इस तरह मैं टीएफएस में एक वर्कटाइम की जांच कर सकता हूं और देख सकता हूं कि गिटेट्ससेट्स वर्कटाइम से जुड़े हुए हैं।

गिट से वर्तमान प्रतिबद्धता से मैं आसानी से हैश को कैसे प्राप्त कर सकता हूं?


Commit हैश

git show -s --format=%H

संक्षेप में प्रतिबद्ध हैश

git show -s --format=%h

अधिक git show उदाहरणों के लिए here क्लिक here


इसे करने का एक और तरीका है :)

git log | grep -o '\w\{8,\}' | head -n 1

गिट फाइलों से सीधे पढ़ने के लिए बैश खोल में एक-लाइनर है:

(head=($(<.git/HEAD)); cat .git/${head[1]})

आपको अपने गिट रूट फ़ोल्डर में उपरोक्त आदेश चलाने की आवश्यकता है।

जब आपके पास रिपोजिटरी फ़ाइलें हों, तो यह विधि उपयोगी हो सकती है, लेकिन git कमांड स्थापित नहीं किया गया है।

यदि काम नहीं करेगा, तो .git/refs/heads फ़ोल्डर में जांचें कि आप किस प्रकार के सिर मौजूद हैं।


गिट लॉग का उपयोग करके एक और,

git log -1 --format="%H"

यह थोड़ी कम हालांकि @outofculture के समान है।


पूर्णता के लिए, क्योंकि किसी ने अभी तक इसका सुझाव नहीं दिया है। .git/refs/heads/master एक फ़ाइल है जिसमें केवल एक पंक्ति होती है: master पर नवीनतम प्रतिबद्धता का हैश। तो आप इसे वहां से पढ़ सकते हैं।

या, आदेश के रूप में:

cat .git/refs/heads/master

अद्यतन करें:

ध्यान दें कि गिट अब / refs / head / फ़ोल्डर में फ़ाइल के बजाय पैक-रेफ फ़ाइल में कुछ प्रमुख रेफरी संग्रहीत करने का समर्थन करता है। https://www.kernel.org/pub/software/scm/git/docs/git-pack-refs.html


फ़ाइल में आपके घर-डीआईआर में ".gitconfig" निम्नलिखित जोड़ें

[alias]
sha = rev-parse HEAD

तो आपके पास याद रखने के लिए एक आसान आदेश होगा:

$ git sha
59fbfdbadb43ad0b6154c982c997041e9e53b600

यदि आप इसे करने के लिए सुपर हैकी तरीका चाहते हैं:

cat .git/`cat .git/HEAD | cut -d \  -f 2`

असल में, गिट फॉर्म में ref: {path from .git} git / HEAD में HEAD का स्थान संग्रहीत करता है ref: {path from .git} । यह आदेश उसको पढ़ता है, "ref:" को स्लाइस करता है, और जो भी फ़ाइल इंगित करता है उसे पढ़ता है।

यह निश्चित रूप से अलग-अलग सिर मोड में असफल हो जाएगा, क्योंकि HEAD "ref: ..." नहीं होगा, लेकिन हैश स्वयं - लेकिन आप जानते हैं, मुझे नहीं लगता कि आप अपने बैश में बहुत अधिक स्मारक की अपेक्षा करते हैं -liners। यदि आपको नहीं लगता कि सेमीकॉलन धोखा दे रहे हैं, हालांकि ...

HASH="ref: HEAD"; while [[ $HASH == ref\:* ]]; do HASH="$(cat ".git/$(echo $HASH | cut -d \  -f 2)")"; done; echo $HASH

यदि आप केवल छोटे हैश चाहते हैं:

git log --pretty=format:'%h' -n 1

इसके अलावा, लंबे एच हैश प्राप्त करने का दूसरा तरीका% H का उपयोग करना है।


यहां एक और प्रत्यक्ष पहुंच कार्यान्वयन है:

head="$(cat ".git/HEAD")"
while [ "$head" != "${head#ref: }" ]; do
  head="$(cat ".git/${head#ref: }")"
done

यह http पर भी काम करता है जो स्थानीय पैकेज अभिलेखागार के लिए उपयोगी है (मुझे पता है: सार्वजनिक वेब साइटों के लिए .git निर्देशिका को एक्सेस करने योग्य बनाने की अनुशंसा नहीं की जाती है):

head="$(curl -s "$baseurl/.git/HEAD")"
while [ "$head" != "${head#ref: }" ]; do
  head="$(curl -s "$baseurl/.git/${head#ref: }")"
done

शायद आप एक उपनाम चाहते हैं तो आपको सभी निफ्टी विवरण याद रखने की ज़रूरत नहीं है। नीचे दिए गए चरणों में से एक करने के बाद, आप बस टाइप करने में सक्षम होंगे:

$ git lastcommit
49c03fc679ab11534e1b4b35687b1225c365c630

स्वीकार्य उत्तर के बाद , इसे सेट करने के दो तरीके यहां दिए गए हैं:

1) ग्लोबल कॉन्फ़िगरेशन (मेरा मूल उत्तर) संपादित करके स्पष्ट तरीके से गिट सिखाएं:

 # open the git config editor
 $ git config --global --edit
 # in the alias section, add
 ...
 [alias]
   lastcommit = rev-parse HEAD
 ...

2) या यदि आप गिट को एक शॉर्टकट सिखाने के लिए एक शॉर्टकट पसंद करते हैं, जैसा हाल ही में एड्रियान ने टिप्पणी की है:

$ git config --global alias.lastcommit "rev-parse HEAD"

यहां से, आखिरी प्रतिबद्धता हैश दिखाने के लिए git lastcommit आखिरी git lastcommit का उपयोग करें।


हमेशा git describe भी है। डिफ़ॉल्ट रूप से यह आपको देता है -

[email protected]:/dev/shm/mpd/ncmpc/pkg (master)$ git describe 
release-0.19-11-g7a68a75

git rev-list --max-count=1 HEAD







changeset