গিট রিমোট ছাঁটাই - যতটা ছাঁটাই করা হয়েছিল তা আমি প্রত্যাশা করি নি didn't


113

ম্যান পৃষ্ঠা থেকে:

Deletes all stale tracking branches under <name>.
These stale branches have already been removed from the remote repository
referenced by <name>, but are still locally available in "remotes/<name>".

সুতরাং আমি ব্যবহার করে একটি গুচ্ছ শাখা মুছে ফেলা

git push origin :staleStuff

এবং তারপর দৌড়ে

git remote prune origin

তবে শুধুমাত্র একটি একক স্থানীয় শাখা ছাঁটাই করা হয়েছিল। এর মধ্যে কয়েকটি শাখা আমার দ্বারা তৈরি হয়েছিল, কিছু সহকর্মীদের দ্বারা। এটি কি ইঙ্গিত করে যে আমি branches শাখাগুলি প্রথমে সঠিকভাবে ট্র্যাক করছি না?


7
কোন শাখাগুলি সরানো হচ্ছে সেগুলি অনুসন্ধান করতে আপনি যা করতে পারেন git remote show originএবং চিহ্নিত কোনও শাখার সন্ধান করতে পারেনstale
কেউ কোথাও

উত্তর:


189

আপনি যখন ব্যবহার করবেন তখন git push origin :staleStuffএটি স্বয়ংক্রিয়ভাবে সরিয়ে ফেলা হয় origin/staleStuff, সুতরাং যখন আপনি দৌড়বেন git remote prune origin, আপনি এমন কোনও শাখা ছাঁটাই করেছেন যা অন্য কারও দ্বারা মুছে ফেলা হয়েছে। সম্ভবত আপনার সহকর্মীদের এখন git pruneআপনি মুছে ফেলা শাখাগুলি থেকে মুক্তি পেতে দৌড়াতে হবে more


সুতরাং ঠিক কি git remote pruneকরে? মূল ধারণা: স্থানীয় শাখাগুলি (শাখাগুলি ট্র্যাকিং নয়) git remote pruneকমান্ড দ্বারা স্পর্শ করা হয় না এবং ম্যানুয়ালি মুছে ফেলা উচিত।

এখন, আরও ভাল বোঝার জন্য একটি বাস্তব-বিশ্বের উদাহরণ:

আপনার কাছে 2 টি শাখা সহ একটি রিমোট রিপোজিটরি রয়েছে: masterএবং feature। ধরে নেওয়া যাক আপনি উভয় শাখায় কাজ করছেন, ফলস্বরূপ আপনার স্থানীয় সংগ্রহস্থলে এই রেফারেন্সগুলি রয়েছে (কোনও বিভ্রান্তি এড়াতে পুরো রেফারেন্সের নাম দেওয়া হয়েছে):

  • refs/heads/master(সংক্ষিপ্ত নাম master)
  • refs/heads/feature(সংক্ষিপ্ত নাম feature)
  • refs/remotes/origin/master(সংক্ষিপ্ত নাম origin/master)
  • refs/remotes/origin/feature(সংক্ষিপ্ত নাম origin/feature)

এখন, একটি সাধারণ দৃশ্য:

  1. অন্য কিছু বিকাশকারী এর সমস্ত কাজ শেষ করে feature, এতে একীভূত হয় masterএবং featureদূরবর্তী সংগ্রহস্থল থেকে শাখাটি সরিয়ে দেয় ।
  2. ডিফল্টরূপে, আপনি যখন git fetch(বা git pull) করেন, আপনার স্থানীয় সংগ্রহস্থল থেকে কোনও রেফারেন্স সরানো হয় না, সুতরাং আপনার কাছে এখনও এই 4 টি রেফারেন্স রয়েছে।
  3. আপনি তাদের পরিষ্কার করার সিদ্ধান্ত নিয়েছেন, এবং চালনা করুন git remote prune origin
  4. গিট সনাক্ত করে যে featureশাখাটি আর বিদ্যমান নেই, সুতরাং refs/remotes/origin/featureএকটি বাসি শাখাও মুছে ফেলা উচিত।
  5. এখন আপনার সাথে 3 টি রেফারেন্স রয়েছে refs/heads/feature, কারণ git remote pruneকোনও refs/heads/*রেফারেন্স সরিয়ে দেয় না ।

branch.<branch_name>.mergeকনফিগারেশন প্যারামিটার দ্বারা দূরবর্তী ট্র্যাকিং শাখার সাথে সম্পর্কিত স্থানীয় শাখাগুলি সনাক্ত করা সম্ভব । এই প্যারামিটারটি কোনও কাজের জন্য সত্যই প্রয়োজন নেই (সম্ভবত ব্যতীত git pull), তাই এটি অনুপস্থিত হতে পারে।

(উদাহরণ থেকে আপডেট এবং মন্তব্যগুলি থেকে দরকারী তথ্য)


আমি পরিস্থিতিটি বুঝতে পেরেছিলাম: শাখাগুলি এখনও স্থানীয়ভাবে উপস্থিত রয়েছে তবে দূরবর্তী রেপো থেকে সরানো হয়েছে। এখন আমি সমস্ত স্থানীয় শাখাগুলি মুছে ফেলতে চাই যেগুলি রিমোটে নেই therefore তাই আমি গিট ছাঁটাই চালাই। আমাকে এটাই বলে যে "এই বাসি শাখাগুলি ইতিমধ্যে দূরবর্তী সংগ্রহস্থল থেকে সরানো হয়েছে"। আমি কি ভূল?
ফেলিক্সিজ

3
আপনি ঠিক বলেছেন, তবে আপনি "স্থানীয় শাখা" এর অর্থ ভুল বুঝে থাকতে পারেন git prune। শুধুমাত্র শাখাগুলি /refs/remotes/<remote_name>/ছাঁটাইয়ের বিষয়; কোনও শাখা /refs/heads/স্পর্শ করা যাবে না - আপনাকে এগুলি ম্যানুয়ালি পরিচালনা করতে হবে।
সর্বাধিক

আহা, আসলেই আমি যা ভেবেছিলাম তাই আমি যা চাই তা করার কোনও উপায় নেই: দূরবর্তী শাখাগুলি ট্র্যাক করছে এমন সমস্ত শাখাগুলি স্বয়ংক্রিয়ভাবে মুছে ফেলুন checking দূরবর্তী শাখাগুলি মুছে ফেলা হয়েছে কিনা তা পরীক্ষা করে?
ফেলিক্সিজ

2
এর জন্য কোনও অন্তর্নির্মিত কমান্ড নেই, তবে আপনি নিজে এই জাতীয় স্ক্রিপ্ট লিখতে পারেন। ট্র্যাকিং শাখাগুলি branch.<branch_name>.mergeকনফিগার প্যারামিটারের উপস্থিতি দ্বারা চিহ্নিত করা যায় ।
সর্বোচ্চ

এই উত্তরটি যদি আপনি মন্তব্যে এই উত্তরটি নিজেই যুক্ত করে থাকেন তবে এটি ভাল হবে যাতে এখানে যারা এসেছেন এবং @ ফেলিক্সিজের মতো একই ধারণা রয়েছে তাদের প্রত্যেককে আপনার উত্তরটি মজার দেখতে হবে না এবং অবশেষে বোঝার জন্য মন্তব্যগুলি পড়তে হবে ।
আকরিকস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.