কোনটি গিটে একটি ট্যাগ পয়েন্ট প্রতিশ্রুতিবদ্ধ তা কীভাবে বলা যায়?


410

আমার কাছে সংগ্রহশালায় অননোটিত ট্যাগগুলির একটি গুচ্ছ রয়েছে এবং আমি কোন প্রতিশ্রুতিবদ্ধ সেগুলি সম্পাদন করতে চাই। এমন কোনও আদেশ আছে যা কেবল ট্যাগগুলি এবং তাদের প্রতিশ্রুতিবদ্ধ SHAs তালিকাভুক্ত করবে? ট্যাগটি চেক করা এবং হেডের দিকে তাকানো আমার কাছে কিছুটা শ্রমসাধ্য বলে মনে হচ্ছে।

হালনাগাদ

আমি প্রতিক্রিয়াগুলি পেরিয়ে যাওয়ার পরে বুঝতে পেরেছিলাম যে আমি আসলে যা চেয়েছিলাম তা হল কেবল ট্যাগটির দিকে যাওয়া ইতিহাসের দিকে নজর দেওয়া, যার git log <tagname>জন্য যথেষ্ট।

যে উত্তরটি উত্তর হিসাবে চিহ্নিত হয়েছে তা ট্যাগ এবং তাদের কমিটের তালিকা পাওয়ার জন্য দরকারী, যা আমি জিজ্ঞাসা করেছি। কিছুটা শেল হ্যাকারি দিয়ে আমি নিশ্চিত যে এগুলি SHA + কমিট বার্তায় রূপান্তর করা সম্ভব।


3
আমি এটি উল্লেখ করতে চাই যে git show-refরেপো পুনর্বিবেচনার শে নয়, ট্যাগের শে দেখায়। $ Git প্রদর্শনী-সুত্র পরীক্ষা 08b9c774ab20e5bdb638339cf4ea2c124b0dae54 refs / ট্যাগ / পরীক্ষা $ Git চেকআউট পরীক্ষা মাথা এখন c7f8831 হয় ... $ Git চেকআউট 08b9c77 মস্তক c7f8831 এখন হচ্ছে ...
কনস্টানটিন Pelepelin

যদি আপনার ট্যাগগুলি টীকায়িত করা হয় তবে আপনার প্রয়োজন--dereference
ট্রেভর বয়ড স্মিথ

উত্তর:


347

এটি করার একটি উপায় থাকবে git rev-list। নিম্নলিখিতটি প্রতিশ্রুতি দেয় যাতে একটি ট্যাগ পয়েন্ট করে:

$ git rev-list -n 1 $TAG

আপনি ~/.gitconfigযদি এটি ব্যবহার করেন তবে এটি একটি উপন্যাস হিসাবে যুক্ত করতে পারেন:

[alias]
  tagcommit = rev-list -n 1

এবং তারপরে এটিকে কল করুন:

$ git tagcommit $TAG

30
কেন ব্যবহার git rev-parse <tag>করবেন না ? নাকি git rev-list -1 <tag>?
জাকুব নারেবস্কি

51
@ জাকুব: git rev-parse $TAGট্যাগ অবজেক্টের SHA1 প্রদান করে, এটি যে প্রতিশ্রুতি দেয় তাতে নয়। git rev-list -1যদিও কাজ করে।
মিপাদি

11
@ মিপাডি: অ- টীকাদিত ট্যাগগুলির জন্য এটি কিছু যায় আসে না; টীকাবিহীন ট্যাগগুলির জন্য আপনি ব্যবহার করতে পারেন git rev-parse $TAG^{commit}বা git rev-parse $TAG^{}
টিকিট

5
আপনি ব্যবহার করতে পারেন:git rev-list $TAG --max-count=1
b73

4
@RobinHsu: আপনি আছে সটীক , ট্যাগ দিয়ে তৈরি যে git tag -aবা git tag -s, তারপর git rev-parse <tag>আপনি একটি SHA-1 দেবে ট্যাগ বস্তুর নিজেই যখন git rev-list -1 <tag>রয়েছে SHA-1 এর দেবেন কমিট (সংশোধন) এটিকে পয়েন্ট করতে, একই হিসাবে git rev-parse <tag>^{commit}। আছে HTH।
জাকুব নারেবস্কি

240
git show-ref --tags

উদাহরণস্বরূপ, git show-ref --abbrev=7 --tagsআপনাকে নীচের মতো কিছু দেখাব:

f727215 refs/tags/v2.16.0
56072ac refs/tags/v2.17.0
b670805 refs/tags/v2.17.1
250ed01 refs/tags/v2.17.2

এর জন্য ধন্যবাদ, এটি প্রকৃতপক্ষে .git/packed-refsবা উভয় দিকে তাকানোর শব্দার্থকতাগুলি আড়াল করে.git/refs/tags/*
ইগোর জাভাকা

3
Hmmm। এটি আমার সংগ্রহস্থলটিতে অদ্ভুত আচরণ রয়েছে: গিট ট্যাগ -a v0.1.1-alpha a9dcc1f24cacde535523bddc22f4c69467428550; গিট শো-রেফ - ট্যাগগুলি -> b784145a9a71478337f5ceae30aaac4e1b955ee5 রেফ / ট্যাগ / ভি0.1.1-আলফা; জাকুব নরবেস্কির উত্তর
নিকসফ্ট

6
এটি কাজ করে, যদিও আমি আশ্চর্য হই যে এগুলিও git tag --verboseদেখানো কি বুদ্ধিমান হবে না ?
অবিচ্ছিন্নতা

34
এটি ট্যাগের প্রতিশ্রুতি নিজেই প্রদর্শন করবে, প্রতিশ্রুতিবদ্ধ ট্যাগটি নয়। আপনি যোগ করতে হবে -d(ক দ্বিতীয় লাইন দিকে) কমিট পতাকা রেফারেন্সড জন্য।
ওল্ড প্রো

4
@ চারলেস বেইলি, যথেষ্ট ন্যায্য, তবে প্রশ্ন ও উত্তরগুলি টীকাযুক্ত ট্যাগগুলি অন্তর্ভুক্ত করার জন্য মুরফিড git show-refকরেছে এবং দুটি ভিন্ন ধরণের ট্যাগের সাথে আলাদাভাবে আচরণ করে এমন ঘটনা সুস্পষ্ট বা সাধারণ জ্ঞান নয়।
ওল্ড প্রো

104

শুধু ব্যবহার git show <tag>

যাইহোক, এটি ডাম্প কমিট কমিয়ে দেয়। এই ভিন্নতা বাদ দিতে, ব্যবহার করুন git log -1 <tag>। (@ ডলফিনড্রিম এবং @ ডেমিসেক্সকে ধন্যবাদ!)


7
এসও-তে, যখন কোনও প্রশ্নের অনেকগুলি পৃথক পৃথক উত্তর থাকে, তবে যে উত্তরগুলি পোস্ট করা হয় সেগুলি প্রথমে আপগ্রেটেড হয় - সেগুলিকে তালিকার শীর্ষে রাখে, এবং পরে সেগুলি আরও উন্নত করে। এটি প্রতিক্রিয়ার মানের তুলনায় গতির উপর ভিত্তি করে একটি বাইসিং প্রতিক্রিয়া লুপ। পর্যাপ্ত কল্পনা দ্বারা এই সমস্যাটি সংশোধন করা যেতে পারে।
সামতিবেস্ট

6
"সেরা সমাধান" কিসের জন্য? আগ্রহ যদি কোনও কমিটের এসএইচএ সন্ধানের জন্য থাকে তবে "গিট শো <মাইটাগ>" এর ট্যাগ পয়েন্টকে দেখানো সেরা সমাধান নয়। এই কমান্ডটি সম্পূর্ণ ভিন্নতার সাথে কমিটের পরিচিতি প্রদর্শন করবে। কমিটের কেবলমাত্র এসএইচএ-র তালিকা দেওয়ার জন্য ট্যাগটি "গিট রেভ-লিস্ট <মাইটাগ> -এন 1" - এ নির্দেশ করে সঠিক সমাধান।
ডলফিনড্রিম

এটি ওপি-র প্রশ্নের উত্তর নয়। git show <tag>পৃথক দেখায়, প্রতিশ্রুতি দেয় না যে ট্যাগ পয়েন্ট।
demimx

@ ডিমিসেক্স আপনি কি সম্পর্কে কথা বলছেন ?? এটি অবশ্যই ট্যাগার, তারিখ এবং অন্যান্য তথ্যের সাথে প্রতিশ্রুতিবদ্ধ হ্যাশটি দেখায়। চেষ্টা করে দেখুন
হ্লুং

4
@ দুলফিনড্রিম @ হ্লুংয়ের মতো নির্দেশ করেছেন, git showস্ক্রিনে আরও অনেকগুলি জিনিস ফেলে দেয় যা সেখানে থাকার দরকার নেই। এটি প্রকৃত প্রতিশ্রুতি হ্যাশটিকে অন্বেষণ করছে। আরও ভাল কমান্ড হ'ল git log -1 [tag-name]বা git log -1 --pretty=oneline [tag-name]আপনি যদি অনেলাইনারদের চান।
demisx

40

আমার সংগ্রহশালায়, git show-ref TAGট্যাগের হ্যাশ দেখায়, প্রতিশ্রুতি দেওয়ার হ্যাশটি এটি নির্দেশ করে না।

git show-ref --dereference TAG শো, অতিরিক্তভাবে, প্রতিশ্রুতি প্রতি দৃষ্টি নিবদ্ধ করা হচ্ছে।


34

ইগর জিভাকা থেকে :

সারসংক্ষেপ

যেহেতু প্রায় 4 প্রায় সমানভাবে গ্রহণযোগ্য তবুও আলাদা আলাদা উত্তর রয়েছে আমি ট্যাগের চামড়ার বিভিন্ন উপায়ের সংক্ষিপ্তসার করব।

  1. git rev-list -1 $TAG( উত্তর ) git rev-listসেই প্রতিশ্রুতিগুলিকে আউটপুট করে যা কেবল কমিট এর SHA1 দেখায় $TAGto আউটপুট সীমিত কমিট এ স্থানটিকে চিহ্নিত করে।git log-1

  2. git show-ref --tags( উত্তর ) সমস্ত ট্যাগ (স্থানীয় এবং দূরবর্তী থেকে আনীত) এবং তাদের এসএএএ 1 দেখায়।

  3. git show-ref $TAG( উত্তর ) SHA1 এর সাথে ট্যাগ এবং তার পথ প্রদর্শন করবে।

  4. git rev-parse $TAG( উত্তর ) একটি অননোটবিহীন ট্যাগের SHA1 প্রদর্শন করবে।

  5. git rev-parse --verify $TAG^{commit}( উত্তর ) উভয় টিকাশযুক্ত এবং অননোটবিহিত ট্যাগগুলির একটি SHA1 প্রদর্শন করবে। উইন্ডোজ ব্যবহারে git rev-parse --verify %TAG%^^^^{commit}(চারটি টুপি)।

  6. cat .git/refs/tags/*অথবা cat .git/packed-refs( উত্তর ) ট্যাগ স্থানীয় বা দূরবর্তী থেকে আনা হয়েছে কিনা তার উপর নির্ভর করে।


33

ব্যবহার

git rev-parse --verify <tag>^{commit}

(যা টীকাবিহীন ট্যাগের জন্যও একটি প্রতিশ্রুতির SHA-1 প্রদান করবে)।


git show-ref <tag><tag>টীকাযুক্ত না হলে কাজ করবে । এবং সর্বদা আছে git for-each-ref(বিশদ জন্য ডকুমেন্টেশন দেখুন)।


11
আমি এটি পছন্দ করি git rev-parse <tag>~0যা কাজ করে বলে মনে হয় এবং উইন্ডোজে কোনও বিশেষ পলায়নের প্রয়োজন নেই (যার পরিবর্তে একটির পরিবর্তে চারটি টুপি (^) প্রয়োজন)। প্রত্যয়টি ~<number><সংখ্যা> পিতামাতার প্রতিশ্রুতি দেয়, অতএব ~0প্রতিশ্রুতি নিজেই দেয়। বিটিডাব্লু, সংশোধন প্রত্যয়টির ^0জন্য একটি বৈধ শর্টহ্যান্ড ^{commit}
আটটিলা


10

প্রতিশ্রুতি দেওয়ার শ / হ্যাশ পাওয়ার জন্য যে কোনও ট্যাগ উল্লেখ করে (ট্যাগের শ নয়):

git rev-list -1 <tag>


8

আমি "সঠিক" উপায়টিও জানতে চাই, তবে ইতিমধ্যে আপনি এটি করতে পারেন:

git show mytag | head -1    

প্রতিশ্রুতিবদ্ধ শিরোনাম সহgit show --oneline mytag | head -1
স্টাফেন

7

এটি বেশ পুরানো হলেও, আমি ভেবেছিলাম যে আমি একটি দুর্দান্ত বৈশিষ্ট্যটি নির্দেশ করব যা আমি সবেমাত্র কমিটের সাথে ট্যাগ তালিকা দেওয়ার জন্য পেয়েছি:

git log --decorate=full

এটি সেই শাখাগুলি প্রদর্শিত হবে যা কোন প্রতিশ্রুতিতে শেষ হয় / শুরু হয় এবং কমিটের জন্য ট্যাগগুলি।


4

ট্যাগগুলি ব্যবহারের দিকে ইঙ্গিত করে সেখানে আপনি আরও সহজে-ব্যাখ্যা-এর চিত্র পেতে পারেন

git log --graph |git name-rev --stdin --tags |less

এবং তারপরে আপনি যে ট্যাগটি সন্ধান করছেন তাতে স্ক্রোল করুন /

আরও কমপ্যাক্ট ভিউ ( --pretty=oneline) প্লাস সমস্ত মাথা ( -a) এছাড়াও সহায়তা করতে পারে:

git log -a --pretty=oneline --graph |git name-rev --stdin --tags |less

কিছুটা ভীতিজনক মনে হচ্ছে, তবে ~/.gitconfigপ্রয়োজনে এ্যালয়েজও করা যেতে পারে ।

~/.gitconfig

[alias]
ls-tags = !git log -a --pretty=oneline --graph |git name-rev --stdin --tags |less

4

সংক্ষিপ্ত পোস্ট-গিট -২ উত্তর

আমি জানি এই প্রশ্নটি বেশ কিছুদিনের জন্য এখানে রয়েছে। এবং সিবি বেইলের উত্তর 100% সঠিক:git show-ref --tags --abbrev

এটি যেহেতু এটি ব্যবহার করে আমি এটি আরও ভাল পছন্দ করি git tag:

git tag --list --format '%(refname:short) %(objectname:short)'

সহজ। সংক্ষিপ্ত।

git taglistএই আদেশের সাথে পিএস ওরফে এটি :

git config --global alias.taglist "tag --list --format '%(refname:short) %(objectname:short)'"


2

এটি ফাইলের নামগুলি প্রদর্শন করে না, তবে কমপক্ষে আপনি সংগ্রহস্থলের অনুভূতি পান।

cat .git/refs/tags/*

সেই ডিরেক্টরিতে প্রতিটি ফাইলের মধ্যে একটি প্রতিশ্রুতিবদ্ধ SHA থাকে একটি প্রতিশ্রুতিতে নির্দেশ করে।


আমি এটি মনে করি, এটি দূরবর্তী থেকে ট্যাগগুলি টেনে নিয়েছিল। .git/packed-refsকাজ যদিও।
ইগোর জাভাকা

2

আমিও চাই জানতে চান সঠিক পথ , কিন্তু আপনি যেকোনো উঁকি পারেন মধ্যে যা করতে পারেন:

$ cat .git/packed-refs 

বা:

$ cat .git/refs/tags/*

ঠিক আছে, তাই প্যাকড-রেফ এবং রেফ / ট্যাগগুলির জন্য আচরণ কিছুটা পৃথক, প্যাকড-রেফগুলি একটি পাঠ্য ফাইল যা ট্যাগ এবং এসএএএচ রয়েছে, অন্যদিকে রেফ / ট্যাগগুলি / এইচএএচএ সমন্বিত একটি ট্যাগের নাম অনুসারে একটি পাঠ্য ফাইলযুক্ত ডিরেক্টরি। আমি আসলে মনে করি যে এটি করার সঠিক উপায়টি রয়েছে git rev-list
ইগোর জাভাকা 22

2

এটি আপনাকে বর্তমান এসএএএ 1 হ্যাশ পাবে

সংক্ষিপ্ত প্রতিশ্রুতি হাশ

git show <tag> --format="%h" --> 42e646e

হ্যাশ প্রতিশ্রুতিবদ্ধ

git show <tag> --format="%H" --> 42e646ea3483e156c58cf68925545fffaf4fb280

1
আমার কাছে থাকা সংস্করণটিতে কাজ করছে বলে মনে হচ্ছে না তবে git log <tag> -n 1 --pretty=%Hআছে
অ্যান্ডি

2

যদি আপনি সোমট্যাগ ট্যাগ (ট্যাগার, তারিখ, ইত্যাদি) এর বিবরণ দেখতে চান তবে কমিটের হ্যাশ এটি প্রতিশ্রুতি দেয় এবং কমিট সম্পর্কে কিছুটা তথ্য দেয় তবে সম্পূর্ণ ভিন্নতা ছাড়াই চেষ্টা করুন

git show --name-status SOMETAG

উদাহরণ আউটপুট:

tag SOMETAG
Tagger: ....
Date:   Thu Jan 26 17:40:53 2017 +0100

 .... tag message .......

commit 9f00ce27c924c7e972e96be7392918b826a3fad9
Author: .............
Date:   Thu Jan 26 17:38:35 2017 +0100

 .... commit message .......

..... list of changed files with their change-status (like git log --name-status) .....

0

সুতরাং আমার কাছে রিলিজ ফোল্ডারগুলির প্রচুর পরিমাণ রয়েছে, যেখানে এই ফোল্ডারগুলি কয়েকটি পৃথক রেপগুলির মধ্যে একটি থেকে চেক আউট হতে পারে এবং এটি ডিভ, কিউ বা মাস্টার শাখা হতে পারে বা উত্পাদন প্রকাশ হতে পারে, একটি ট্যাগ থেকে চেক আউট হতে পারে এবং ট্যাগটি হতে পারে বর্ণিত বা না। আমার কাছে একটি স্ক্রিপ্ট রয়েছে যা লক্ষ্য ফোল্ডারটি দেখবে এবং ফর্মটিতে একটি উত্তর ফিরে পাবে -। সমস্যাটি হ'ল ট্যাগ চেকআউটের জন্য গিটারের বিভিন্ন সংস্করণে আলাদা আলাদা সংস্করণ।

সুতরাং আমি খুঁজে পেয়েছি git show-ref --tags টীকাবিহীন ট্যাগ বাদে প্রাথমিকভাবে কাজ । তবে যুক্ত করে -ড ট্যাগের তালিকায় একটি পৃথক এন্ট্রি যুক্ত করেছে, একটি ট্যাগের জন্য, অন্যটি টীকা দেওয়ার জন্য (টীকাটি কমিটটি sed {as হিসাবে চিহ্নিত হয়েছিল যা আমি সিডের সাথে বেরিয়ে এসেছি)।

সুতরাং এটি আমার স্ক্রিপ্টের মূল, যে কেউ এটি চায়: -

REPO=`git --git-dir=${TARGET} remote show origin -n | \
         grep "Fetch URL:" | \
         sed -E "s/^.*\/(.*)$/\1/" | \
         sed "s/.git$//"`

TAG=`git --git-dir=${TARGET} show-ref -d --tags | \
         grep \`git --git-dir=${TARGET} show --quiet --format=format:%H HEAD\` | \
         cut -d\  -f2 | \
         cut -d/ -f3 | \
         sed "s/\^{}$//"`

if [ "${TAG}" == "" ] ; then 
  BRANCH=`git --git-dir=${TARGET} show-ref --heads | \
         grep \`git --git-dir=${TARGET} show --quiet --format=format:%H HEAD\` | \
         cut -d\  -f2 | \
         cut -d/ -f3`
  TAG=${BRANCH}
fi

0

নীচে ব্যবহার করতে পারেন, এটি কমিট হ্যাশ দেবে give
git show -s --format=%H <tag>^{commit}

সংক্ষেপে কমিট হ্যাশ প্রয়োজন হলে, git show -s --format=%h <tag>^{commit}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.