গিট ট্যাগগুলি কি কেবল বর্তমান শাখায় প্রযোজ্য?


156

আমি বর্তমানে একাধিক শাখা রয়েছে এমন একটি সংগ্রহস্থল নিয়ে কাজ করছি।

আমি যখন একটি ট্যাগ তৈরি করি, সেই ট্যাগটি কি তত্কালীন বর্তমান শাখাকে বোঝায়?

অন্য কথায়: আমি যখনই একটি ট্যাগ তৈরি করি তখন আমার কি সেই কাঙ্ক্ষিত শাখায় গিয়ে সেই শাখার অভ্যন্তরে ট্যাগ করার প্রয়োজন হয় যাতে ট্যাগটি সেই সময়ে সেই শাখাকে বোঝায়?

উত্তর:


151

আপনি যেমন একটি ট্যাগ তৈরি করে যদি

git tag v1.0

ট্যাগটি বর্তমানে আপনি যে শাখায় রয়েছেন তার অতি সাম্প্রতিক প্রতিশ্রুতি উল্লেখ করবে। আপনি শাখা পরিবর্তন করতে পারেন এবং একটি ট্যাগ তৈরি করতে পারেন।

আপনি ট্যাগ করার সময় অন্য শাখায় কেবল উল্লেখ করতে পারেন,

git tag v1.0 name_of_other_branch

যা অন্যান্য শাখার সাম্প্রতিক কমিটের জন্য ট্যাগ তৈরি করবে।

অথবা আপনি কিছু প্রতিশ্রুতিবদ্ধতার SHA1 এ সরাসরি উল্লেখ করে কোনও শাখা নির্বিশেষে যে কোনও জায়গায় ট্যাগটি রাখতে পারেন

git tag v1.0 <sha1>

201

চার্লসবির উত্তর এবং হেলবার্টের উত্তর দুটিই সহায়ক, তবে সেগুলি বুঝতে আমার কিছুটা সময় লেগেছে। এটি দেওয়ার আরও একটি উপায় এখানে:

  • একটি ট্যাগ একটি হল পয়েন্টার একটি কমিট , এবং করে শাখা স্বাধীনভাবে অস্তিত্ব
    • এটি বোঝা যে গুরুত্বপূর্ণ ট্যাগ নাই সরাসরি শাখার সঙ্গে সম্পর্ক - তারা শুধুমাত্র কখনও চিহ্নিত একটি কমিট
      • এই প্রতিশ্রুতিটি যে কোনও শাখা থেকে চিহ্নিত করা যেতে পারে - অর্থাত্ এটি কোনও সংখ্যক শাখার ইতিহাসের অংশ হতে পারে - কোনওটিই নয়।
    • অতএব, git show <tag>একটি ট্যাগের বিশদটি দেখতে দৌড়ে কোনও শাখার কোনও রেফারেন্স থাকে না, কেবল সেই প্রতিশ্রুতির আইডি যা ট্যাগটি নির্দেশ করে।
      • (কমিট আইডি (ওরফে অবজেক্টের নাম বা এসএইচএ -1 আইডি) 40 টি-অক্ষরের স্ট্রিং যা হেক্সস ডিজিটের সমন্বয়ে গঠিত হয় যা কমিটের বিষয়বস্তুগুলির উপর হ্যাশ থাকে; যেমন 6f6b5997506d48fc6267b0b60c3f0261b6afe7a2:)
  • শাখাগুলি কেবল পরোক্ষভাবে খেলতে আসে :
    • সময় তৈরি একটি ট্যাগ দ্বারা implying কমিট যে ট্যাগ নির্দেশ করবে :
      • বর্তমান শাখার অতি সাম্প্রতিক কমিট (ওরফে হেড) -এর জন্য ডিফল্ট কোনও ট্যাগের জন্য লক্ষ্য নির্দিষ্ট না করা; উদাহরণ:
        • git tag v0.1.0 # tags HEAD of *current* branch
      • সেই শাখার সবচেয়ে সাম্প্রতিক প্রতিশ্রুতিতে ট্যাগ লক্ষ্যটিকে ডিফল্ট হিসাবে কোনও শাখার নাম উল্লেখ করা; উদাহরণ:
        • git tag v0.1.0 develop # tags HEAD of 'develop' branch
      • (অন্যরা যেমন উল্লেখ করেছে, আপনি ট্যাগের লক্ষ্য হিসাবে স্পষ্টভাবে কমিট আইডিও নির্দিষ্ট করতে পারেন))
    • git describeবর্তমান শাখা বর্ণনা করতে ব্যবহার করার সময় :
      • git describe [--tags]এই শাখার ইতিহাসে সর্বাধিক সাম্প্রতিক [সম্ভবত লাইটওয়েট] ট্যাগ হওয়ার পরে কমিটের ক্ষেত্রে বর্তমান শাখাটিকে বর্ণনা করে ।
      • সুতরাং, উল্লেখ করা git describeট্যাগটি সামগ্রিকভাবে সর্বাধিক সৃজিত ট্যাগটি প্রতিফলিত করতে পারে না

সুতরাং, একটি প্রদত্ত ট্যাগের জন্য (যেমন, v0.1.0), প্রকৃত উত্সটি প্রকৃত বিল্ডে কী রয়েছে তা জানতে (সেই উত্সটির), আপনার সত্যই বিল্ডটি ভিত্তিক ছিল সেই শাখাটি জানতে হবে? অর্থাৎ, প্রদত্ত প্রতিশ্রুতিতে বিভিন্ন শাখায় বিভিন্ন বংশধর থাকতে পারে, তাই না?
হক্কে পার্কার

2
@ হাওকিয়েপার্কার: আমি আর এতে নিমগ্ন নই, তবে আপনাকে শাখাটি জানার দরকার নেই, কারণ কোনও ট্যাগ একটি নির্দিষ্ট প্রতিশ্রুতি (যা একাধিক শাখার অংশ হতে পারে) সনাক্ত করে এবং আপনি সেখান থেকে তদন্ত করতে পারেন।
mklement0

তবে আমি যদি গিট শো করি [ট্যাগনাম] তবে এটি লেখক এবং তারিখের উপরে একটি শাখার নাম দেখায় যা "চলমান গিট শো << ট্যাগ> এর বিপরীতে যে কোনও ট্যাগের বিবরণে কোনও শাখার কোনও উল্লেখ নেই"
ব্র্যাড থমাস

39

ট্যাগগুলি এবং শাখা সম্পূর্ণরূপে সম্পর্কিত নয়, যেহেতু ট্যাগগুলি একটি নির্দিষ্ট প্রতিশ্রুতি বোঝায়, এবং শাখা একটি ইতিহাসের শেষ প্রতিশ্রুতির একটি চলমান রেফারেন্স। শাখা যায়, ট্যাগ থাকে।

সুতরাং আপনি যখন কোন প্রতিশ্রুতি ট্যাগ করেন, আপনি যেটি ট্যাগ করতে চান তার SHA1 সরবরাহ করে যদি কোন অঙ্গীকার বা শাখাটি চেক আউট হয় তা গিটের যত্ন নেয় না।

এমনকি আমি কোনও শাখায় উল্লেখ করে ট্যাগ করতে পারি (এটি তখন শাখার ডগায় ট্যাগ করবে), এবং পরে বলতে পারি যে শাখার টিপ অন্য কোথাও রয়েছে ( git reset --hardউদাহরণস্বরূপ), বা শাখাটি মুছুন। আমি তৈরি ট্যাগটি সরানো হবে না।


17
অন্য কথায়, ট্যাগগুলি কুৎসিত গিট হ্যাশগুলির কেবলমাত্র সুন্দর নাম। ট্যাগ (এবং হ্যাশ) কোন শাখা বিদ্যমান (এডি) তা বিবেচনা করেই বিদ্যমান।
সি-অটো

8

git tag <TAGNAME>কোনও অতিরিক্ত প্যারামিটার ছাড়াই কল করার সময় , গিট আপনার বর্তমান হেড থেকে (যেমন আপনার বর্তমান শাখার প্রধান) একটি নতুন ট্যাগ তৈরি করবে create এই শাখায় অতিরিক্ত কমিট যোগ করার সময়, শাখা শুল্ক সেই নতুন কমিটিগুলি বজায় রাখবে, যখন ট্যাগটি সর্বদা একই প্রতিশ্রুতি বোঝায়।

কল করার সময় git tag <TAGNAME> <COMMIT>আপনি ট্যাগ তৈরির জন্য কোন প্রতিশ্রুতিবদ্ধ তা নির্দিষ্ট করে দিতে পারেন।

নির্বিশেষে, একটি ট্যাগ এখনও নির্দিষ্ট প্রতিশ্রুতি (শাখা নয়) কেবল একটি "পয়েন্টার"।


6

আমরা কিছু অতীত প্রতিশ্রুতিবদ্ধ জন্য একটি ট্যাগ তৈরি করতে পারি:

git tag [tag_name] [reference_of_commit]

উদাহরণ:

git tag v1.0 5fcdb03

1

আপনি যে শাখায় রয়েছেন তা যদি আপনি ট্যাগ করতে চান তবে টাইপ করুন:

git tag <tag>

এবং এর সাথে শাখাটি পুশ করুন:

git push origin --tags

0

আপনি যদি কোনও শাখা থেকে একটি ট্যাগ তৈরি করতে চান যা কিছু release/yourbranchইত্যাদি something তবে আপনার মতো কিছু ব্যবহার করা উচিত

git tag YOUR_TAG_VERSION_OR_NAME origin/release/yourbranch

সঠিক ট্যাগ তৈরির পরে যদি আপনি ট্যাগটি রিমোটে চাপতে চান তবে কমান্ডটি ব্যবহার করুন

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