git - কিভাবে একটি গিট দূরবর্তী ট্যাগ মুছে ফেলতে?




git-tag (13)

আপনি কিভাবে একটি গিট ট্যাগ মুছে ফেলা হয়েছে যে ইতিমধ্যে push করা হয়েছে?


হাজার হাজার দূরবর্তী ট্যাগের জন্য 100x দ্রুত পদ্ধতি

11,000 টিরও বেশি ট্যাগ মুছে ফেলার সময় এই উত্তরগুলি পড়ার পরে, আমি এই পদ্ধতিগুলির উপর নির্ভর করে বা xargs অনেক বেশি সময় নিয়েছি, যতক্ষণ না আপনার ঘন্টা বার্ন হয়।

Struggling, আমি দুটি অনেক দ্রুত উপায় খুঁজে পাওয়া যায় নি। উভয় জন্য, আপনি রিমোটে মুছে ফেলতে চান এমন ট্যাগগুলির তালিকা তৈরি করতে git ls-remote --tags git tag বা git ls-remote --tags দিয়ে শুরু করুন। নিচের উদাহরণগুলিতে আপনি কোন grep ing, sort ing, tail বা head ing ( যেমন grep -P "my_regex" | sort | head -n -200 ইত্যাদি ) সহ sorting_proccessing_etc বাদ দিতে বা প্রতিস্থাপন করতে পারেন।

এই প্রথম পদ্ধতিটি দ্রুততম, সম্ভবত xargs ব্যবহার করার চেয়ে 20 থেকে 100 গুণ দ্রুত, এবং একটি সময়ে অন্তত কয়েক হাজার ট্যাগের সাথে কাজ করে।

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 কিছুই না push করে, এটি মুছে ফেলা (এই ভাবে 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 " ")

স্থানীয় ট্যাগ '12345' মুছুন

git tag -d 12345

দূরবর্তী ট্যাগ '12345' মুছুন (উদাহরণস্বরূপ; গিথহাব সংস্করণও)

git push origin :refs/tags/12345

বিকল্প পথ বা পন্থা

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}

এখন Github.com এ যান এবং রিফ্রেশ করুন, তারা অদৃশ্য হয়ে যায়।


আপনি PowerShell ব্যবহার করছেন, এবং আপনি তাদের একটি গুচ্ছ মুছে ফেলতে চান:

# 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 $_ }

আপনি যদি SourceTree ব্যবহার করেন - একটি দুর্দান্ত গিট GUI - তাহলে আপনি নিম্নলিখিতটি করে কমান্ড লাইনটি ছাড়া সহজে এটি করতে পারেন:

  1. SourceTree এ আপনার সংগ্রহস্থল খুলুন
  2. বামে "ট্যাগ্স" ট্যাব নির্বাচন করুন এবং প্রসারিত করুন
  3. আপনি মুছে ফেলা ট্যাগ উপর ডান ক্লিক করুন
  4. "YOUR_TAG_NAME মুছুন" নির্বাচন করুন
  5. যাচাইকরণ উইন্ডোতে, "Remotes থেকে ট্যাগ সরান" নির্বাচন করুন।

YOUR_TAG_NAME এখন আপনার স্থানীয় সংগ্রহস্থল থেকে এবং সমস্ত রিমোটগুলি থেকে সরানো হবে - এটি GitHub, BitBucket, অথবা অন্য যে কোনও স্থানে আপনি সেই রিপোজিটরির জন্য রিমোট হিসাবে তালিকাভুক্ত হবেন।

এছাড়াও, যদি আপনি স্থানীয়ভাবে ট্যাগটি স্থানীয়ভাবে মুছে ফেলেন তবে দূরবর্তী উত্সগুলিতে নয়, এবং আপনি এটি সর্বত্র মুছে ফেলতে চান তবে কেবল একটি নতুন ট্যাগ তৈরি করুন যার একই নাম রয়েছে এবং এটি একই উত্সের সাথে সংযুক্ত। তারপর, সর্বত্র মুছে ফেলার জন্য উপরে পদক্ষেপ পুনরাবৃত্তি করুন।


ইতিমধ্যে xargs কিছু জন্য কাজ অনেক মনে হচ্ছে। এই থ্রেডের মাধ্যমে ফিরে তাকিয়ে, আমি আপনার অভিজ্ঞতার সাথে xargs অনুমান করছি কারণ আসল উত্তরটি xargs -n 1 ব্যবহার করা হয়েছিল যখন এটি আসলেই দরকার ছিল না।

এটি আপনার পদ্ধতির সমতুল্য এক যা xargs স্বয়ংক্রিয়ভাবে সর্বাধিক কমান্ড লাইনের দৈর্ঘ্যের সাথে সম্পর্কিত:

git tag | sorting_processing_etc | xargs git push --delete origin

xargs খুব সমান্তরাল প্রসেস চালাতে পারেন। xargs সঙ্গে পদ্ধতি 2:

git tag | sorting_processing_etc | xargs -P 5 -n 100 git push --delete origin

উপরে প্রতিটি প্রসেসে সর্বাধিক 100 টি আর্গুমেন্ট পরিচালনা করতে সর্বাধিক 5 টি প্রসেস ব্যবহার করে। আপনি আপনার প্রয়োজনের জন্য ভাল কাজ করে তা খুঁজে পেতে আর্গুমেন্ট দিয়ে পরীক্ষা করতে পারেন।


একটি আরো সহজবোধ্য উপায় হয়

git push --delete origin YOUR_TAG_NAME

আইএমও উপসর্গ কলোন সিনট্যাক্স এই পরিস্থিতিতে সামান্য বিট হয়


দূরবর্তী ট্যাগ নামতে আপনাকে 'খালি' রেফারেন্সটি কেবল push করতে হবে:

git push origin :tagname

অথবা, আরো --delete , - --delete বিকল্পটি ব্যবহার করুন (অথবা -d আপনার গিট সংস্করণটি --delete চেয়ে পুরানো):

git push --delete origin tagname

যদি আপনি স্থানীয় ট্যাগ মুছে ফেলতে চান তবে ব্যবহার করুন:

git tag --delete tagname

পটভূমি

একটি শাখা, ট্যাগ, বা একটি রিমোট রিপোজিটরিতে অন্য রেফারেন্সকে সন্নিবেশ করাতে "স্পর্শ কোথায়, কোন উৎস, কোন গন্তব্য?"

git push where-to-push 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

উৎস রেফারেন্স (কোলনটির পূর্বে অংশ) বাদ দিয়ে, আপনি দূরবর্তী প্রান্তে রেফারেন্স মুছে ফেলার মাধ্যমে গন্তব্যটিতে 'কিছুই' চাপবেন না।


যদি আপনার # ক্যারেক্টারের সাথে শুরু করা একটি ট্যাগ থাকে, উদাহরণস্বরূপ #ST002 , আপনি হয়ত দেখতে পাবেন যে আপনি স্বাভাবিক নিদর্শনগুলি ব্যবহার করে মুছে ফেলতে পারবেন না। অর্থাত

git tag -d #STOO2

ট্যাগটি মুছে ফেলবে না, কিন্তু এটির মতো স্ট্রিং লিটারাল এ মোড়ানো হবে

git tag -d "#ST002" or git tag -d '#ST002'

যে এটি মুছে ফেলা হবে। আশা করা হচ্ছে যে ট্যাগ নাম লেখার জন্য # ব্যবহার করার ভুল করে এমন কাউকে সাহায্য করবে।


রিমোট রিপোজিটরি থেকে ট্যাগ মুছে ফেলার জন্য:

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>'

সমস্ত স্থানীয় ট্যাগ মুছুন এবং দূরবর্তী ট্যাগগুলির তালিকা পান :

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-tag