ইতিমধ্যে ঠেলাঠেলি করা গিট ট্যাগটি আপনি কীভাবে মুছবেন?
ইতিমধ্যে ঠেলাঠেলি করা গিট ট্যাগটি আপনি কীভাবে মুছবেন?
উত্তর:
রিমোট ট্যাগের নামের জন্য আপনাকে কেবল 'খালি' রেফারেন্সটি চাপতে হবে:
git push origin :tagname
অথবা, আরও স্পষ্টভাবে, --delete
বিকল্পটি ব্যবহার করুন (বা -d
যদি আপনার গিট সংস্করণটি 1.8.0 এর চেয়ে পুরানো হয়):
git push --delete origin tagname
নোট করুন যে গিটটিতে ট্যাগের নেমস্পেস এবং শাখার নেমস্পেস রয়েছে তাই আপনি একটি শাখার জন্য এবং ট্যাগের জন্য একই নামটি ব্যবহার করতে পারেন। আপনি যদি তা নিশ্চিত করতে চান যে আপনি ট্যাগের পরিবর্তে দুর্ঘটনাক্রমে শাখাটি মুছে ফেলতে পারবেন না, আপনি সম্পূর্ণ রেফ নির্দিষ্ট করতে পারবেন যা কোনও শাখা কখনই মুছবে না:
git push origin :refs/tags/tagname
আপনার যদি স্থানীয় ট্যাগ মুছতে হয় তবে ব্যবহার করুন:
git tag --delete tagname
কোনও শাখা, ট্যাগ বা অন্য রেফিটিকে দূরবর্তী সংগ্রহস্থলে পুশ করাতে "কোন রেপো, কোন উত্স, কোন গন্তব্য" নির্দিষ্ট করা জড়িত?
git push remote-repo source-ref:destination-ref
একটি আসল বিশ্বের উদাহরণ যেখানে আপনি নিজের মাস্টার শাখাটিকে উত্সের মাস্টার শাখায় ঠেলাচ্ছেন:
git push origin refs/heads/master:refs/heads/master
ডিফল্ট পাথগুলির কারণে যা সংক্ষিপ্ত করা যেতে পারে:
git push origin master:master
ট্যাগগুলি একইভাবে কাজ করে:
git push origin refs/tags/release-1.0:refs/tags/release-1.0
যা সংক্ষিপ্ত করা যেতে পারে:
git push origin release-1.0:release-1.0
উত্স রেফ (কোলনের আগের অংশ) বাদ দিয়ে আপনি দূরবর্তী প্রান্তে রেফটি মুছে ফেলে গন্তব্যে 'কিছুই না' চাপ দিন।
git push --delete origin tag1 tag2
। স্থানীয় ট্যাগ মুছে ফেলার জন্য একই বৈধgit tag -d tag1 tag2
tag
সাথে সংযুক্ত। যে কারণে শাখার নাম অপ্রাসঙ্গিক।
git tag -d `git tag`
এটি সমস্ত স্থানীয় ট্যাগ মুছে ফেলবে। git push --delete origin `git tag`
আপনি স্থানীয়ভাবে দূরবর্তী ট্যাগগুলি টানছেন এমনটি ধরে নিয়ে একই প্রয়োগ হয় । এটি একটি পরীক্ষার পরিবেশে সহজ ছিল।
আরও সোজা উপায় way
git push --delete origin YOUR_TAG_NAME
আইএমও প্রিফিক্সিং কোলন সিনট্যাক্স এই পরিস্থিতিতে কিছুটা বিজোড়
git push --delete origin "TAGNAME"
যেখানে TAGNAME মূল ট্যাগটির নাম।
tag
ট্যাগটি পেয়েছেন তা নিশ্চিত করার জন্য আপনার ট্যাগের নামের আগে শব্দটি রাখতে পারেন।
refs/tags/
, এরকম: refs/tags/v2.3.1
।
যদি v0.1.0
মুছতে আপনার কাছে কোনও দূরবর্তী ট্যাগ থাকে এবং আপনার রিমোটটি থাকে origin
তবে কেবল:
git push origin :refs/tags/v0.1.0
আপনার যদি স্থানীয়ভাবে ট্যাগটি মুছতে হয় তবে:
git tag -d v0.1.0
মুছে ফেলার জন্য গিটের অস্বাভাবিক সিনট্যাক্সের ব্যাখ্যার জন্য অ্যাডাম ফ্রাঙ্কোর উত্তর দেখুন :
।
fatal: remote part of refspec is not a valid name in :/refs/tags/0.0.1
...?
:tagname
দূরবর্তী মুছে ফেলার জন্য কেবল কাজ করা উচিত।
সমস্ত স্থানীয় ট্যাগ মুছুন এবং দূরবর্তী ট্যাগগুলির তালিকা পান :
git tag -l | xargs git tag -d
git fetch
সমস্ত দূরবর্তী ট্যাগ সরান
git tag -l | xargs -n 1 git push --delete origin
স্থানীয় ট্যাগগুলি পরিষ্কার করুন
git tag -l | xargs git tag -d
দূরবর্তী সংগ্রহস্থল থেকে ট্যাগটি সরাতে:
git push --delete origin TAGNAME
আপনি স্থানীয়ভাবে ট্যাগটি মুছতে পারেন:
git tag -d TAGNAME
git push --delete origin TAGNAME && git tag -d TAGNAME
আপনার টার্মিনাল থেকে, এটি করুন:
git fetch
git tags
git tag -d {tag-name}
git push origin :refs/tags/{tag-name}
এখন গিথুব ডট কম এ গিয়ে রিফ্রেশ করুন, তারা অদৃশ্য হয়ে যায়।
git tag -d your_tag_name
git push origin :refs/tags/your_tag_name
your_tag_name
থেকে মুছে ফেলা ।your_tag_name
থেকে মুছে ফেলা হয় ।git tag -d 12345
git push origin :refs/tags/12345
git push --delete origin tagName
git tag -d tagName
কেবলমাত্র লক্ষ্য করুন, আপনার যদি দূরবর্তী ট্যাগ হিসাবে একটি প্রত্যন্ত শাখা থাকে, তবে এই আদেশগুলি অস্পষ্ট:
git push origin :tagname
git push --delete origin tagname
সুতরাং ট্যাগ মুছতে আপনাকে অবশ্যই এই আদেশটি ব্যবহার করতে হবে:
git push origin :refs/tags/<tag>
এবং এই শাখাটি মোছার জন্য:
git push origin :refs/heads/<branch>
যদি তা না হয় তবে আপনি এটির মতো একটি ত্রুটি পাবেন:
error: dst refspec <tagname> matches more than one.
error: failed to push some refs to '<repo>'
11,000 টিরও বেশি ট্যাগ মোছার প্রয়োজনে এই উত্তরগুলি পড়ার পরে আমি এই পদ্ধতিগুলি নির্ভর করে বা শিখেছি xargs
অনেক বেশি সময় নেয়, যদি না আপনার জ্বলতে সময় না থাকে।
সংগ্রাম, আমি দুটি আরও দ্রুত উপায় খুঁজে পেয়েছি । উভয়ের জন্যই আপনি যে ট্যাগগুলিকে রিমোটে মুছতে চান তা দিয়ে শুরু করুন git tag
বা git ls-remote --tags
তৈরি করুন। নীচের উদাহরণগুলিতে আপনি যে sorting_proccessing_etc
কোনও grep
আইএন, sort
আইএন, tail
আইএন বা head
আইএনএস ( যেমন grep -P "my_regex" | sort | head -n -200
ইত্যাদি ) দিয়ে বাদ দিতে বা প্রতিস্থাপন করতে পারেন :
xargs
এবং এক সাথে কমপক্ষে কয়েক হাজার ট্যাগ দিয়ে কাজ করে ।git push origin $(< git tag | sorting_processing_etc \
| sed -e 's/^/:/' | paste -sd " ") #note exclude "<" for zsh
কিভাবে কাজ করে? ট্যাগগুলির সাধারণ, লাইন-বিভক্ত তালিকাকে স্পেস-বিভাজিত ট্যাগগুলির একক লাইনে রূপান্তর করা হয়, প্রতিটি এটির সাহায্যে চাপানো হয় :
। । ।
tag1 becomes
tag2 ======> :tag1 :tag2 :tag3
tag3
git push
এই ফর্ম্যাট ট্যাগটি ব্যবহার করে প্রতিটি দূরবর্তী রেফারেন্সকে কিছুই মুছে দেয় না , এটি মোছা হয় (এই ভাবে এগিয়ে দেওয়ার জন্য সাধারণ বিন্যাসটি local_ref_path:remote_ref_path
)।
এই উভয় পদ্ধতির পরে, আপনি সম্ভবত আপনার স্থানীয় ট্যাগগুলি মুছতে চাইবেন। এটি অনেক দ্রুততর তাই আমরা ব্যবহার করতে ফিরে যেতে পারি xargs
এবং git tag -d
যা যথেষ্ট।
git tag | sorting_processing_etc | xargs -L 1 git tag -d
বা রিমোট মুছার মতো:
git tag -d $(< git tag | sorting_processing_etc | paste -sd " ")
যদি আপনি সোর্স ট্রি ব্যবহার করেন - একটি দুর্দান্ত গিট জিইউআই - তবে আপনি নিম্নলিখিতটি করে সহজেই কমান্ড লাইন ছাড়াই এটি করতে পারেন:
YOUR_TAG_NAME এখন আপনার স্থানীয় সংগ্রহস্থল এবং সমস্ত রিমোটগুলি থেকে সরানো হবে - এটি গিটহাব, বিটবাকেট, বা অন্য যে কোনও জায়গায় আপনি সেই সংগ্রহস্থলের জন্য রিমোট হিসাবে তালিকাভুক্ত হয়েছেন।
এছাড়াও, আপনি যদি স্থানীয়ভাবে কোনও ট্যাগ মুছে ফেলেছেন তবে দূরবর্তী উত্স থেকে নেই এবং আপনি এটি সর্বত্র মুছতে চান, তবে কেবল একটি নতুন ট্যাগ তৈরি করুন যার একই নাম রয়েছে এবং উত্সের মতো একই প্রতিশ্রুতিতে সংযুক্ত রয়েছে। তারপরে, সর্বত্র মুছে ফেলার জন্য উপরের পদক্ষেপগুলি পুনরাবৃত্তি করুন।
আপনি যদি release01
গিট সংগ্রহস্থল নামে একটি ট্যাগ তৈরি করে থাকেন তবে নিম্নলিখিতটি করে আপনি এটি আপনার সংগ্রহশালা থেকে সরিয়ে ফেলবেন:
git tag -d release01
git push origin :refs/tags/release01
একটি মার্চুরিয়াল সংগ্রহস্থল থেকে একটি অপসারণ করতে:
hg tag --remove featurefoo
দয়া করে https://confluence.atlassian.com / পৃষ্ঠাগুলি / মতামত.অ্যাকশন? পৃষ্ঠা Id= 282175551
আপনি যদি পাওয়ারশেল ব্যবহার করছেন এবং আপনি সেগুলির একটি গোছা মুছতে চান:
# Local tags:
git tag -l | foreach { git tag -d $_ }
# Remote tags:
git tag -l | foreach { git push --delete origin $_ }
অবশ্যই, মুছে ফেলার আগে আপনি এগুলি ফিল্টারও করতে পারেন:
git tag -l | Where-Object { $_ -like "build-*" } | foreach { git tag -d $_ }
@ কিউব্যাকএক্সের পরামর্শ অনুসারে, আমি এই উত্তরটি আমার মূল থেকে বিভক্ত করেছি:
xargs
এবং টুইটগুলি দিয়ে আরও অনেক বেশি স্কেল করতে পারে। এটি গিথুব এপিআই ব্যবহার করে , একটি ব্যক্তিগত অ্যাক্সেস টোকেন এবং ইউটিলিটিটি ব্যবহার করে parallel
।git tag | sorting_processing_etc | parallel --jobs 2 curl -i -X DELETE \
https://api.github.com/repos/My_Account/my_repo/git/refs/tags/{} -H
\"authorization: token GIT_OAUTH_OR_PERSONAL_KEY_HERE\" \
-H \"cache-control: no-cache\"`
parallel
অনেকগুলি অপারেটিং মোড রয়েছে, তবে সাধারণত প্রক্রিয়া সংখ্যার উপর সীমা নির্ধারণের সময় আপনি যে কোনও কমান্ড দেন তা সমান্তরাল করে তোলে। --jobs 2
দ্রুত অপারেশন করার জন্য আপনি প্যারামিটারটি পরিবর্তন করতে পারেন , তবে গিথুবের রেট সীমাতে আমার সমস্যা ছিল যা বর্তমানে 5000 / ঘন্টা, তবে এটিও একটি অনিবন্ধিত স্বল্প-মেয়াদী সীমা রয়েছে বলে মনে হয়।
এর পরে, আপনি সম্ভবত আপনার স্থানীয় ট্যাগগুলিও মুছতে চাইবেন। এটি অনেক দ্রুততর তাই আমরা ব্যবহার করতে ফিরে যেতে পারি xargs
এবং git tag -d
যা যথেষ্ট।
git tag | sorting_processing_etc | xargs -L 1 git tag -d
অন্যান্য উত্তরগুলি কীভাবে এটি সম্পাদন করতে পারে তা নির্দেশ করে, তবে আপনার পরিণতিগুলি মনে রাখা উচিত কারণ এটি একটি দূরবর্তী সংগ্রহস্থল।
রিট্যাগিং বিভাগে গিট ট্যাগ ম্যান পৃষ্ঠাতে, দূরবর্তী রেপোটির অন্যান্য ব্যবহারকারীদের কীভাবে সৌজন্যতার সাথে পরিবর্তনের বিষয়ে অবহিত করা যায় তার একটি ভাল ব্যাখ্যা রয়েছে। এমনকি অন্যদের কীভাবে আপনার পরিবর্তন করা উচিত তা যোগাযোগের জন্য তারা একটি কার্যকর ঘোষণার টেম্পলেট দেয়।
আমি একটি প্যাটার্নের সাথে মেলে এমনগুলি ব্যতীত সমস্ত ট্যাগ সরিয়ে ফেলতে চেয়েছিলাম যাতে আমি কয়েক মাসের প্রোডাকশন ট্যাগ ব্যতীত সমস্ত মুছতে পারি, আমি এখানে দুর্দান্ত সাফল্য ব্যবহার করেছি:
সমস্ত দূরবর্তী ট্যাগ মুছুন এবং মোছা থেকে এক্সপ্রেশন বাদ দিন
git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs -n 1 git push --delete origin
সমস্ত স্থানীয় ট্যাগ মুছুন এবং মোছা থেকে এক্সপ্রেশন বাদ দিন
git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs git tag -d
স্থানীয় এবং মূল উভয় অবস্থান থেকে প্রদত্ত ট্যাগ সরানোর জন্য সরল স্ক্রিপ্ট। ট্যাগটি সত্যই উপস্থিত রয়েছে কিনা তা দিয়ে।
if [ $(git tag -l "$1") ]; then
git tag --delete $1
git push --delete origin $1
echo done.
else
echo tag named "$1" was not found
fi
ব্যবহারবিধি:
।> git-tag-purge.sh ট্যাগ_নাম)
xargs
ইতিমধ্যে কিছু করার জন্য অনেক কাজ মনে হচ্ছে । এই থ্রেডটির পিছনে ফিরে তাকানো, আমি অনুভব করছি xargs
যে আপনি যে স্বচ্ছন্দতার সাথে অভিজ্ঞতা করেছেন তা হ'ল কারণ যখন আসল উত্তরটি xargs -n 1
সত্যই প্রয়োজন ছিল না তখন এটি ব্যবহৃত হয়েছিল।
এটি xargs
স্বয়ংক্রিয়ভাবে সর্বাধিক কমান্ড লাইনের দৈর্ঘ্যের সাথে ডিল করা বাদে এটি আপনার পদ্ধতির সমান:
git tag | sorting_processing_etc | xargs git push --delete origin
xargs
সমান্তরালে খুব প্রক্রিয়া চালাতে পারেন। পদ্ধতি 2 এর সাথে xargs
:
git tag | sorting_processing_etc | xargs -P 5 -n 100 git push --delete origin
উপরোক্ত প্রতিটি প্রক্রিয়াতে সর্বোচ্চ 100 টি আর্গুমেন্ট পরিচালনা করতে সর্বোচ্চ 5 টি প্রক্রিয়া ব্যবহার করে uses আপনার প্রয়োজনের জন্য সবচেয়ে ভাল কাজ করে তা খুঁজে পেতে আপনি যুক্তি দিয়ে পরীক্ষা করতে পারেন।
আপনি যদি # টি অক্ষর দিয়ে শুরু করে একটি ট্যাগ তৈরি করেন , যেমন #ST002
, আপনি দেখতে পাবেন যে আপনি সাধারণ নিদর্শনগুলি ব্যবহার করে মুছতে অক্ষম। অর্থাত
git tag -d #STOO2
ট্যাগ মুছে যাবে না, কিন্তু একটি এটা মোড়কে স্ট্রিং আক্ষরিক তাই মত
git tag -d "#ST002" or git tag -d '#ST002'
এটি মুছে ফেলা হবে। এটির প্রত্যাশা এমন কারও পক্ষে সহায়তা করবে যা ট্যাগ নাম লিখতে # ব্যবহার করে ভুল করেছে ।
রিমোটের সাথে গোলযোগ না করে স্থানীয়ভাবে এটি পরীক্ষার জন্য এখানে একটি স্থানীয় টেস্টকেস রয়েছে:
~/p $ mkdir gittest
~/p/git $ cd gittest/
~/p/gittest $ git init
Initialized empty Git repository in /Users/local_user/p/gittest/.git/
~/p/gittest $ touch testfile.txt
~/p/gittest $ git add testfile.txt
~/p/gittest $ git commit -m "initial commit"
[master (root-commit) 912ce0e] initial commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 testfile.txt
~/p/gittest $ git tag
~/p/gittest $ git tag -a testtag
~/p/gittest $ git tag
testtag
~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
b0a6c15cabb990e6d6c46f762891b63608d962f3 refs/tags/testtag
~/p/gittest $ cd ..
~/p $ mkdir gitbare
~/p $ cd gitbare
~/p/gitbare $ git init --bare
Initialized empty Git repository in /Users/local_user/p/gitbare/
~/p/gitbare $ cd ..
~/p $ cd gittest/
~/p/gittest $ git remote add origin /Users/local_user/p/gitbare
~/p/gittest $ git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 215 bytes | 215.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /Users/local_user/p/gitbare
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
~/p/gittest $ git push origin testtag
Counting objects: 1, done.
Writing objects: 100% (1/1), 163 bytes | 163.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To /Users/local_user/p/gitbare
* [new tag] testtag -> testtag
~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
912ce0e40635c90241fdab756dce7ea34938de57 refs/remotes/origin/master
b0a6c15cabb990e6d6c46f762891b63608d962f3 refs/tags/testtag
~/p/gittest $ git push -d origin testtag
To /Users/local_user/p/gitbare
- [deleted] testtag
~/p/gittest git tag -d testtag
Deleted tag 'testtag' (was b0a6c15)
~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
912ce0e40635c90241fdab756dce7ea34938de57 refs/remotes/origin/master
~/p/gittest
হাই কেবল আমার তৈরি একটি উপনাম ভাগ করতে চেয়েছিল যা একই কাজ করে:
আপনার ~ / .gitconfig এ নিম্নলিখিতগুলি যুক্ত করুন
[alias]
delete-tag = "!f() { \
echo 'deleting tag' $1 'from remote/origin ausing command: git push --delete origin tagName;'; \
git push --delete origin $1; \
echo 'deleting tag' $1 'from local using command: git tag -d tagName;'; \
git tag -d $1; \
}; f"
ব্যবহারের মতো দেখাচ্ছে:
-->git delete-tag v1.0-DeleteMe
deleting tag v1.0-DeleteMe from remote/origin ausing command: git push --delete origin tagName;
To https://github.com/jsticha/pafs
- [deleted] v1.0-DeleteMe
deleting tag v1.0-DeleteMe from local using command: git tag -d tagName;
Deleted tag 'v1.0-DeleteMe' (was 300d3ef22)