গিটের মধ্যে অতি সাম্প্রতিক ট্যাগটি পাওয়ার সহজতম উপায় কী?
git tag a HEAD
git tag b HEAD^^
git tag c HEAD^
git tag
আউটপুট:
a
b
c
প্রতিটি ট্যাগের ডেটটাইম পেতে এবং তাদের তুলনা করার জন্য আমার কি কোনও স্ক্রিপ্ট লেখা উচিত?
গিটের মধ্যে অতি সাম্প্রতিক ট্যাগটি পাওয়ার সহজতম উপায় কী?
git tag a HEAD
git tag b HEAD^^
git tag c HEAD^
git tag
আউটপুট:
a
b
c
প্রতিটি ট্যাগের ডেটটাইম পেতে এবং তাদের তুলনা করার জন্য আমার কি কোনও স্ক্রিপ্ট লেখা উচিত?
উত্তর:
আপনি একবার দেখে নিতে পারেন git describe
, যা আপনি যা জিজ্ঞাসা করছেন তার কাছাকাছি কিছু করে।
--abbrev=0
এটির সাথে নিকটতম টীকাযুক্ত ট্যাগটি ফিরে আসা উচিত
git describe --exact-match --abbrev=0
।
git describe --tags
এবং গিথুব প্রকাশের পৃষ্ঠাতে কম্বের শেষ ট্যাগটির তুলনা করুন
অতি সাম্প্রতিক ট্যাগটি পেতে:
git describe --tags
অতি সাম্প্রতিক টীকায়িত ট্যাগ পেতে :
git describe --abbrev=0
git describe
বলেছেন: --abbrev=<n> [...] An <n> of 0 will suppress long format, only showing the closest tag.
git describe --tags
git checkout $(git describe --abbrev=0 --tags)
সমস্ত শাখায় সর্বশেষ ট্যাগযুক্ত প্রতিশ্রুতির ট্যাগ আউটপুট দেবে
git describe --tags $(git rev-list --tags --max-count=1)
TAG=$(git describe --tags $(git rev-list --tags --max-count=1))
@ উইলিয়াম-পার্সেল
অতি সাম্প্রতিক ট্যাগটি পেতে, আপনি এটি করতে পারেন:
each প্রতি-রেফ-রেফস / ট্যাগগুলির জন্য গিট --sort = -taggerdate - formatt = '% (পুনঃনামকরণ)' - অ্যাকাউন্ট = 1
অবশ্যই, আপনি কাউন্ট আর্গুমেন্ট বা পছন্দ অনুসারে বাছাই করা ক্ষেত্র পরিবর্তন করতে পারেন। মনে হচ্ছে আপনি কিছুটা আলাদা প্রশ্ন জিজ্ঞাসা করতে চেয়েছিলেন, তবে এটি ব্যাখ্যা করার সাথে সাথে এই প্রশ্নের উত্তর দেয় does
--sort=-authordate
এবং --sort=authordate
।
--sort=-taggerdate
। ট্যাগগুলির জন্য, authordate
এবং committerdate
খালি (শর্ট কী হিসাবে এতই বেহুদা)।
git for-each-ref refs/tags --sort=-taggerdate --format='%(refname:short)' --count=1
আরও উন্নত :)
--points-at=$SHA
আপনাকে একটি প্রতিশ্রুতিবদ্ধ হ্যাশের ট্যাগ দেবে।
এ কেমন?
TAG=$(git describe $(git rev-list --tags --max-count=1))
প্রযুক্তিগতভাবে, অগত্যা আপনি সর্বশেষ ট্যাগটি পাবেন না, তবে সর্বশেষ প্রতিশ্রুতি যা ট্যাগ হয়, যা আপনি যা খুঁজছেন তা হতে পারে বা নাও পারে।
--tags=<pattern>
মধ্যে rev-list
। উদাহরণস্বরূপ, শেষ সংস্করণ ট্যাগটি পানgit describe --tags $(git rev-list --tags='v[0-9].[0-9]*' --max-count=1)
git describe --tags $(git rev-list --tags --max-count=1)
আপনি মৃত্যুদণ্ড কার্যকর করতে পারেন: git describe --tags $(git rev-list --tags --max-count=1)
এখানে কথা বলেছেন: সর্বশেষ ট্যাগের নাম কীভাবে পাবেন?
git describe ...
আগের ট্যাগটি দেয়?!)
--abbrev=0
উত্তর চেষ্টা করেছিলাম এবং তারা আমার যে ট্যাগটি চায় তার একটি অংশ কেটে দেয়।
"অতি সাম্প্রতিক" গিটের ক্ষেত্রে দুটি অর্থ হতে পারে।
আপনার অর্থ হতে পারে, "কোন ট্যাগটির তৈরির তারিখ সর্বশেষে রয়েছে" এবং এখানে বেশিরভাগ উত্তরই সেই প্রশ্নের জন্য। আপনার প্রশ্নের শর্তাবলী, আপনি ট্যাগ ফিরে করতে চাই c
।
অথবা আপনার অর্থ হতে পারে "কোনও নামযুক্ত শাখার বিকাশের ইতিহাসে কোন ট্যাগটি সবচেয়ে নিকটতম", সাধারণত আপনি যে শাখায় রয়েছেন HEAD
,। আপনার প্রশ্নে, এটি ট্যাগ ফিরে আসবে a
।
এগুলি অবশ্যই আলাদা হতে পারে:
A->B->C->D->E->F (HEAD)
\ \
\ X->Y->Z (v0.2)
P->Q (v0.1)
কল্পনা করুন যে বিকাশকারী সোমবার Z
হিসাবে ট্যাগ v0.2
হয়েছে, এবং তারপরে মঙ্গলবারের Q
মতো ট্যাগ হয়েছে v0.1
। v0.1
এটি আরও সাম্প্রতিক, তবে v0.2
উন্নয়নের ইতিহাসে হেডের কাছাকাছি, এই দিক থেকে যে পথটি চলছে সেগুলি হেডের কাছাকাছি সময়ে শুরু হয়।
আমি মনে করি আপনি সাধারণত এই দ্বিতীয় উত্তরটি চান, বিকাশের ইতিহাসের কাছাকাছি। আপনি git log v0.2..HEAD
প্রতিটি ট্যাগের জন্য ইত্যাদি ব্যবহার করে এটি খুঁজে পেতে পারেন । এটি আপনাকে হেডে কমিটের সংখ্যা দেয় যেহেতু v0.2
হেডের অনুসরণের পথটি অন্যদিকে চলে যাওয়ার পরে শেষ হয় ।
এখানে একটি পাইথন স্ক্রিপ্ট রয়েছে যা এই চেকটি চালাচ্ছে সমস্ত ট্যাগের মাধ্যমে পুনরাবৃত্তি করে এবং তারপরে ট্যাগ পাথটি বিচ্যুত হওয়ার পরে শিরোনামে স্বল্পতম কমিটের সাহায্যে ট্যাগটি মুদ্রণ করে:
https://github.com/MacPython/terryfy/blob/master/git-closest-tag
git describe
কিছুটা আলাদা কিছু করে, এটি হেড থেকে ইতিহাসে ফিরে যাওয়ার পথে প্রথম ট্যাগটি খুঁজে পেতে (যেমন) হেড থেকে পিছনে ট্র্যাক করে। গিট শর্তে, git describe
এমন ট্যাগগুলির সন্ধান করুন যা হেড থেকে "পৌঁছনীয়" সুতরাং এটি এর মতো ট্যাগগুলি v0.2
হেড থেকে ফেরার পথে নয়, তবে সেখান থেকে সরে যাওয়া কোনও পথ খুঁজে পাবে।
git describe --tags
বর্তমান শাখার দ্বারা দেখা সক্ষম হতে সর্বশেষ ট্যাগটি প্রদান করে
git log --tags --no-walk --pretty="format:%d" | sed 2q | sed 's/[()]//g' | sed s/,[^,]*$// | sed 's ...... '
আপনি যদি সর্বশেষের ট্যাগের চেয়েও বেশি প্রয়োজন
(গিট বর্ণনা করুন - ট্যাগগুলি মাঝে মাঝে ভুল হ্যাশ দেয়, তবে আমি জানি না কেন, তবে আমার জন্য - ম্যাক্স-কাউন্ট 2 কাজ করে না)
আপনি বিপরীত কালানুক্রমিকভাবে সর্বশেষ 2 ট্যাগ নামের সাথে তালিকাটি পেতে পারেন, গিট 1.8.4 এ পুরোপুরি কাজ করে। গিটের পূর্ববর্তী সংস্করণগুলির জন্য (যেমন 1.7। *), আউটপুটটিতে কোনও "ট্যাগ:" স্ট্রিং নেই - কেবল শেষ সেড কলটি মুছুন
যদি আপনি 2 টিরও বেশি সর্বশেষ ট্যাগ চান - তবে এই "সেড 2 কিউ" কে "সেড 5 কিউ" বা আপনার যা প্রয়োজন তা পরিবর্তন করুন
তারপরে আপনি প্রতিটি ট্যাগের নামটি সহজেই পরিবর্তনশীল বা অন্যটিতে পার্স করতে পারেন।
git log --tags --no-walk --pretty="format:%D" | sed -nr '5q;s;^.*(tag: )([^,]*).*;\2;p'
যেখানে %D
চারপাশের অক্ষরগুলি বাদ দেওয়া হয় ()
এবং sed
5 ক্লাবের সূচনা 5 ক এর আগে 4 লাইন ছেড়ে যায়, তারপরে 'ট্যাগ: `এবং প্রথম', 'এর মধ্যে সমস্ত অক্ষর মুদ্রণ করে। সুতরাং ... ধরে নিচ্ছি যে ট্যাগের ভিতরে কোনও কমা ব্যবহার করা হয়নি, এটি পুরোপুরি কার্যকর।
সমস্ত পরামর্শ ( ম্যাথু ব্রেট ব্যাখ্যা ব্যতীত , এই উত্তর পোস্টের আপ টু ডেট) - এ কী ভুল ?
কেবল যে কোনো কমান্ড jQuery এর গীত ইতিহাসের উপর অন্যান্য দ্বারা সরবরাহকৃত চালানো যখন তোমার দিকে ইতিহাসের বিভিন্ন পয়েন্ট ও চেক ফলাফলের চাক্ষুষ ট্যাগিং ইতিহাস উপস্থাপনা (আমি করেনি তাই আপনি এই পোস্টটিকে দেখতে):
$ git log --graph --all --decorate --oneline --simplify-by-decoration
আজকাল অনেক প্রকল্প মূললাইন থেকে পৃথক শাখায় প্রকাশ (এবং তাই ট্যাগিং) সম্পাদন করে ।
এর দৃ strong় কারণ রয়েছে । কেবল কোনও সুপ্রতিষ্ঠিত জেএস / সিএসএস প্রকল্প দেখুন look ব্যবহারকারীদের কনভেনশনগুলির জন্য তারা ডিভিসিএসে বাইনারি / মিনিফাইড রিলিজ ফাইল বহন করে। প্রাকৃতিকভাবে প্রকল্প রক্ষণাবেক্ষণকারী হিসাবে আপনি আপনার মেনলাইন ডিফার্ট ইতিহাসকে অকেজো বাইনারি ব্লব দিয়ে আবর্জনা ফেলতে চান না এবং মেইনলাইনের বাইরে বিল্ডিং আর্টফিটগুলি প্রতিশ্রুতিবদ্ধ করতে চান না ।
কারণ গিটটি ডিএজি ব্যবহার করে এবং রৈখিক ইতিহাস নয় - দূরত্বের মেট্রিকের সংজ্ঞা দেওয়া খুব কঠিন তাই আমরা বলতে পারি - HEAD
ওরে রেভ আমার নিকটতম !
আমি নিজের যাত্রা শুরু করি (ভিতরে দেখুন, আমি এই দীর্ঘ পোস্টে অভিনব প্রমাণ চিত্রগুলি অনুলিপি করিনি):
গিতে শাখা প্রশাখার ক্ষেত্রে অতীতে নিকটতম ট্যাগটি কী?
ট্যাগল এবং পুনর্বিবেচনার মধ্যে কার্যকারিতা হ্রাসের সাথে আমার দূরত্বের 4 টি যুক্তিসঙ্গত সংজ্ঞা রয়েছে:
HEAD
থেকে একত্রীকরণ বেস ট্যাগ দিয়েHEAD
এবং ট্যাগআমি কীভাবে সংক্ষিপ্ততম পথের দৈর্ঘ্য গণনা করতে জানি না ।
স্ক্রিপ্ট যে অনুযায়ী সাজানোর ট্যাগ তারিখ এর একত্রীকরণ বেস মধ্যে HEAD
এবং ট্যাগ:
$ git tag \
| while read t; do \
b=`git merge-base HEAD $t`; \
echo `git log -n 1 $b --format=%ai` $t; \
done | sort
এটি বেশিরভাগ প্রকল্পে ব্যবহারযোগ্য।
স্ক্রিপ্ট যা শৃঙ্খলাবদ্ধ করে যেগুলি হেড থেকে পৌঁছনীয় তবে ট্যাগ থেকে পৌঁছনীয় নয় এমন রেভের সংখ্যা অনুসারে ট্যাগগুলিকে সাজান :
$ git tag \
| while read t; do echo `git rev-list --count $t..HEAD` $t; done \
| sort -n
যদি আপনার প্রকল্পের ইতিহাসে কমিটের ক্ষেত্রে অদ্ভুত তারিখ থাকে (রিবেসগুলির কারণে বা অন্য কোনও ইতিহাস পুনর্লিখনের কারণে বা কিছু মরন BIOS ব্যাটারি বা আপনি যে ইতিহাসে করেন এমন অন্যান্য যাদুবিদ্যাকে প্রতিস্থাপন করতে ভুলে যান) উপরের স্ক্রিপ্টটি ব্যবহার করুন।
তারিখের ব্যবহার অনুসারে বাছাই করা ট্যাগগুলির তালিকা পেতে সর্বশেষ বিকল্পের জন্য ( ট্যাগ নির্ধারিত একীভূত বেসের তারিখের জন্য):
$ git log --tags --simplify-by-decoration --pretty="format:%ci %d" | sort -r
পরিচিত বর্তমান সংশোধন তারিখ ব্যবহার করতে:
$ git log --max-count=1
নোট করুন যে git describe --tags
নিজস্ব ক্ষেত্রে ব্যবহার রয়েছে তবে প্রকল্পের ইতিহাসে মানুষের প্রত্যাশিত নিকটতম ট্যাগ খুঁজে পাওয়ার জন্য নয় ।
দ্রষ্টব্য আপনি যে কোনও সংশোধন উপরের রেসিপিগুলি ব্যবহার করতে পারেন, কেবল HEAD
যা চান তার সাথে প্রতিস্থাপন করুন !
git describe --abbrev=0 --tags
আপনি যদি সর্বশেষ ট্যাগ না দেখেন তবে এটি চালানোর আগে উত্স আনার বিষয়টি নিশ্চিত করুন:
git remote update
git tag -l ac* | tail -n1
উপসর্গ "এসি" দিয়ে শেষ ট্যাগটি পান । উদাহরণস্বরূপ, ট্যাগটির সাথে নামকরণ করা হয়েছে ac1.0.0
, বা ac1.0.5
। নামক অন্যান্য ট্যাগ 1.0.0
, 1.1.0
উপেক্ষা করা হবে।
git tag -l [0-9].* | tail -n1
সর্বশেষ ট্যাগটি পান, যার প্রথম চর 0-9
। সুতরাং, প্রথম চরের সাথে সেই ট্যাগগুলিকে a-z
উপেক্ষা করা হবে।
git tag --help # Help for `git tag`
git tag -l <pattern>
প্রদত্ত প্যাটার্নের সাথে মিলে এমন নামের সাথে ট্যাগগুলি তালিকাবদ্ধ করুন (বা যদি কোনও প্যাটার্ন দেওয়া না হয় তবে সমস্ত)। আর্গুমেন্ট ব্যতীত "গিট ট্যাগ" চালানো সমস্ত ট্যাগকেও তালিকাবদ্ধ করে। প্যাটার্নটি হ'ল শেল ওয়াইল্ডকার্ড (অর্থাত্, fnmatch (3) ব্যবহার করে মিলিত)। একাধিক নিদর্শন দেওয়া যেতে পারে; যদি তাদের কোনওটির সাথে মেলে, ট্যাগটি দেখানো হবে।
tail -n <number> # display the last part of a file
tail -n1 # Display the last item
সাথে git tag --help
, sort
তর্ক সম্পর্কে । এটি lexicorgraphic order
ডিফল্টরূপে ব্যবহার করবে , যদি tag.sort
সম্পত্তি বিদ্যমান না থাকে।
ট্যাগের জন্য কনফিগার করা মূল্যে ডিফল্ট অর্ডার করুন। গিট কনফিগারেশন (1) দেখুন।
গুগলের পরে, কেউ বলেছেন গিট 2.8.0 সিনট্যাক্স অনুসরণ করে সমর্থন করে।
git tag --sort=committerdate
git tag --sort=committerdate | tail -1
আপনার শেষ দুটি ট্যাগের ক্ষেত্রে নিম্নলিখিতটি আমার জন্য কাজ করে (উদাহরণস্বরূপ, বর্তমান ট্যাগ এবং পূর্ববর্তী ট্যাগের মধ্যে পরিবর্তন লগ তৈরি করতে)। আমি এটি কেবলমাত্র এমন পরিস্থিতিতে পরীক্ষা করেছি যেখানে সর্বশেষতম ট্যাগটি ছিল HEAD
।
PreviousAndCurrentGitTag=`git describe --tags \`git rev-list --tags --abbrev=0 --max-count=2\` --abbrev=0`
PreviousGitTag=`echo $PreviousAndCurrentGitTag | cut -f 2 -d ' '`
CurrentGitTag=`echo $PreviousAndCurrentGitTag | cut -f 1 -d ' '`
GitLog=`git log ${PreviousGitTag}..${CurrentGitTag} --pretty=oneline | sed "s_.\{41\}\(.*\)_; \1_"`
এটি আমার প্রয়োজন অনুসারে, তবে আমি কোনও গিট উইজার্ড না থাকায় আমি নিশ্চিত এটি আরও উন্নত হতে পারে। প্রতিশ্রুতিবদ্ধ ইতিহাস এগিয়ে যাওয়ার ক্ষেত্রে এটি ভেঙে যাওয়ারও আমার সন্দেহ আছে। এটি কারওর পক্ষে সহায়তা করার ক্ষেত্রে আমি কেবল ভাগ করছি।
আমার প্রথম চিন্তা আপনি ব্যবহার করতে পারবেন git rev-list HEAD
, যা মিশ্রণে, সমস্ত বিভক্তিকে বিপরীত কালানুক্রমিক ক্রমে তালিকাবদ্ধ করে git tag --contains
। যখন আপনি এমন কোনও রেফ খুঁজে পান যেখানে git tag --contains
অসাধারণ তালিকা তৈরি করে, আপনি সর্বাধিক সাম্প্রতিক ট্যাগ (গুলি) খুঁজে পেয়েছেন।
আপনার যদি একটি লাইনারের প্রয়োজন হয় যা বর্তমান শাখায় সর্বশেষ ট্যাগের নাম (ট্যাগ তারিখ অনুসারে) পায় :
git for-each-ref refs/tags --sort=-taggerdate --format=%(refname:short) --count=1 --points-at=HEAD
আমরা সেটআপটিতে সংস্করণ নম্বর সেট করতে এটি ব্যবহার করি।
আউটপুট উদাহরণ:
v1.0.0
উইন্ডোজেও কাজ করে।
-bash: syntax error near unexpected token '('
--format="%(refname:short)"
) এবং --points-at=HEAD
এটি এড়িয়ে যায় তবে এটি কাজ করে। শেষ স্যুইচ দিয়ে এটি কিছুই ফেরায় না, আমার ধারণা যে আমার HEAD
ট্যাগ নেই?
HEAD
ট্যাগ নেই।
এটি একটি পুরানো থ্রেড, তবে মনে হচ্ছে অনেক লোক ওপির প্রশ্নের সাদামাটা, সহজতম এবং সবচেয়ে সঠিক উত্তর অনুপস্থিত: বর্তমান শাখার জন্য সর্বশেষ ট্যাগটি পেতে , আপনি ব্যবহার করেন git describe HEAD
। সম্পন্ন.
সম্পাদনা করুন: আপনি কোনও বৈধ পুনঃনামকরণ এমনকি রিমোটগুলি সরবরাহ করতে পারেন; যেমন, git describe origin/master
আপনাকে সর্বশেষতম ট্যাগটি বলবে যা উত্স / মাস্টার থেকে পাওয়া যেতে পারে।
for-each-ref
কমান্ড ( stackoverflow.com/a/5261470/515973 ) এবং সমন্বয় rev-list
এবং describe
( stackoverflow.com/a/7979255/515973 )
git describe branchname --tags
আমার শাখায় সর্বশেষ ট্যাগ পাওয়ার জন্য কাজ করে (গিট সংস্করণ ২.১২.২)
কেবলমাত্র বর্তমান শাখা / ট্যাগ নামের সর্বশেষ ট্যাগটি পেতে যেটি বর্তমান শাখার উপসর্গ রয়েছে, আমাকে নিম্নলিখিতটি সম্পাদন করতে হয়েছিল
BRANCH=`git rev-parse --abbrev-ref HEAD` && git describe --tags --abbrev=0 $BRANCH^ | grep $BRANCH
শাখা মাস্টার:
git checkout master
BRANCH=`git rev-parse --abbrev-ref HEAD` && git describe --tags
--abbrev=0 $BRANCH^ | grep $BRANCH
master-1448
শাখার কাস্টম:
git checkout 9.4
BRANCH=`git rev-parse --abbrev-ref HEAD` && git describe --tags
--abbrev=0 $BRANCH^ | grep $BRANCH
9.4-6
এবং আমার চূড়ান্ত প্রয়োজন বৃদ্ধি এবং পরবর্তী ট্যাগিং জন্য ট্যাগ +1।
BRANCH=`git rev-parse --abbrev-ref HEAD` && git describe --tags --abbrev=0 $BRANCH^ | grep $BRANCH | awk -F- '{print $NF}'
জিজ্ঞাসা করা প্রশ্ন হিসাবে,
কীভাবে বর্তমান শাখায় সর্বশেষ ট্যাগের নাম পাবেন
তুমি চাও
git log --first-parent --pretty=%d | grep -m1 tag:
--first-parent
git log
কোনও মার্জ করা ইতিহাসের বিবরণ না দিতে বলে , --pretty=%d
কেবল সজ্জায় অর্থাত্ কোনও কমিটের স্থানীয় নাম দেখানোর জন্য বলে। grep -m1
"কেবল একটির সাথে মেলে" বলে, তাই আপনি কেবল সাম্প্রতিক ট্যাগটি পান।
অ্যানোটেটেড ট্যাগ বনাম টীকাগুলির এখানে খুব বেশি উল্লেখ নেই। 'বর্ণনা' টীকাযুক্ত ট্যাগগুলিতে কাজ করে এবং অননোটবিহিতদের উপেক্ষা করে।
এটি কুরুচিপূর্ণ তবে কাজটি অনুরোধ করেছে এবং এটি অন্যান্য শাখায় কোনও ট্যাগ পাবেন না (এবং কমান্ডের মধ্যে উল্লিখিত একটিতে নয়: নীচের উদাহরণে মাস্টার)
ফিল্টারিংটি সম্ভবত অনুকূলিত করা উচিত (একীভূত), তবে আবার, এটি কাজটি মনে হয়।
git log --decorate --tags master |grep '^commit'|grep 'tag:.*)$'|awk '{print $NF}'|sed 's/)$//'|head -n 1
আমি এখন এটি ব্যবহার করতে যাচ্ছি সমালোচনা স্বাগত :)