একটি দুর্দান্ত এবং সাধারণ প্রশ্ন - "গিট ফেচ" এর কাজটি কি একটি কঠোর উপ-সেট git fetch --tags?
অর্থাৎ আমি যদি দৌড়ে যাই git fetch --tags, ততক্ষণে সরাসরি ততক্ষণে চালানোর কোনও কারণ আছে কি git fetch?
কি git pullএবং git pull --tags? একই অবস্থা?
একটি দুর্দান্ত এবং সাধারণ প্রশ্ন - "গিট ফেচ" এর কাজটি কি একটি কঠোর উপ-সেট git fetch --tags?
অর্থাৎ আমি যদি দৌড়ে যাই git fetch --tags, ততক্ষণে সরাসরি ততক্ষণে চালানোর কোনও কারণ আছে কি git fetch?
কি git pullএবং git pull --tags? একই অবস্থা?
উত্তর:
দ্রষ্টব্য: 1.9 / 2.0 গিট দিয়ে শুরু (Q1 2014) , বিকল্পটি ছাড়াই একই কমান্ড লাইনের মাধ্যমে কী আনা হয়েছে তা ছাড়াওgit fetch --tags ট্যাগ আনে ।
মাইকেল হ্যাগার্টি (মাহাগার) দ্বারা প্রতিশ্রুতিবদ্ধ c5a84e9 দেখুন :
পূর্বে, আনতে "
--tags" বিকল্পটি রেফস্পেক নির্দিষ্ট করার সমতুল্য বলে বিবেচিত হতrefs/tags/*:refs/tags/*কমান্ড লাইনে; বিশেষত, এটি
remote.<name>.refspecকনফিগারেশনটিকে উপেক্ষা করে।কিন্তু এটা অন্য রেফারেন্স আনার সময় ছাড়া ট্যাগ আনতে খুব দরকারী, যেহেতু তা না হয় হল বেশ ট্যাগ আনা পাবে দরকারী ছাড়াও অন্য রেফারেন্স।
সুতরাং পরবর্তী বিকল্পটি করতে এই বিকল্পটির শব্দার্থবিজ্ঞান পরিবর্তন করুন।যদি কোনও ব্যবহারকারী কেবল ট্যাগগুলি আনতে চান তবে স্পষ্টত রেফস্পেক নির্দিষ্ট করা এখনও সম্ভব:
git fetch <remote> 'refs/tags/*:refs/tags/*'দয়া করে মনে রাখবেন যে 1.8.0.3 এর আগের ডকুমেন্টেশনটি
fetch --tagsআচরণের এই দিকটি সম্পর্কে অস্পষ্ট ছিল " "।
কমিট f0cb2f1 (2012-12-14)fetch --tagsডকুমেন্টেশনটি পুরানো আচরণের সাথে মেলে।
এই প্রতিশ্রুতিটি নতুন আচরণের সাথে ম্যাচ করার জন্য ডকুমেন্টেশনগুলিকে পরিবর্তন করে (দেখুনDocumentation/fetch-options.txt)।অনুরোধ সমস্ত ট্যাগ দূরবর্তী থেকে সংগ্রহ করা আর যাই হোক না কেন প্রাপ্ত করেছে হচ্ছে ছাড়াও ।
যেহেতু গিট 2.5 (কিউ 2 2015) git pull --tagsআরও শক্তিশালী:
দেখুন 19d122b কমিট দ্বারা পল TAN ( pyokagan) , 13 মে 2015.
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে cc77b99 কমিট , 22 মে 2015)
pull:--tagsকোনও মার্জ প্রার্থীদের ক্ষেত্রে ত্রুটি সরানযেহেতু 441ed41 ( "
git pull --tags":। একটি উন্নততর বার্তা দিয়ে ত্রুটি, 2007-12-28, গীত 1.5.4+),git pull --tagsএকটি ভিন্ন ত্রুটির বার্তা মুদ্রণ যদি হতোgit-fetchকোনো একত্রীকরণ প্রার্থীদের ফিরে না:It doesn't make sense to pull all tags; you probably meant: git fetch --tagsএটি কারণ that সময়ে,
git-fetch --tagsকোনও কনফিগার করা রেফস্পেকগুলি ওভাররাইড করে এবং এভাবে কোনও মার্জ পরীক্ষার্থী থাকবে না। বিভ্রান্তি রোধ করার জন্য ত্রুটি বার্তাটি এভাবেই চালু করা হয়েছিল।যাইহোক, c5a84e9 (
fetch --tags: আনা ট্যাগ ছাড়াও অন্যান্য উপাদান, 2013-10-30, গীত 1.9.0+),git fetch --tagsকোনো কনফিগার refspecs ছাড়াও ট্যাগ আনা হবে।
সুতরাং, যদি কোনও মার্জ প্রার্থীদের পরিস্থিতি দেখা দেয় তবে তা--tagsসেট করা হয়নি was এই হিসাবে, এই বিশেষ ত্রুটি বার্তাটি এখন অপ্রাসঙ্গিক।বিভ্রান্তি রোধ করতে, এই ত্রুটি বার্তাটি সরান।
গিট 2.11+ (Q4 2016) এর git fetchসাথে দ্রুত।
দেখুন কমিট 5827a03 (13 অক্টোবর 2016) দ্বারা জেফ কিং ( peff) ।
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 9fcd144 26 অক্টোবর 2016)
fetch:has_sha1_fileট্যাগ অনুসরণের জন্য "দ্রুত" ব্যবহার করুনআমরা যে শাখাগুলির সাথে সম্পর্কিত নয় এমন অনেকগুলি ট্যাগ রয়েছে এমন কোনও রিমোট থেকে আনার সময়, কোনও ট্যাগ দ্বারা চিহ্নিত বস্তুটি (যেটি আমরা আনতে যাচ্ছি না!) আমাদের সংগ্রহস্থলে উপস্থিত রয়েছে কিনা তা পরীক্ষা করে আমরা অনেকগুলি চক্র নষ্ট করতাম used খুব সাবধানে।
এই প্যাচটি গতিবেগের জন্য যথাযথতা ত্যাগ করতে HAS_SHA1_QUICK ব্যবহার করতে আনতে শেখায়, যেখানে আমরা একসাথে একযোগে ত্রুটিযুক্ত হতে পারি।
এখানে অন্তর্ভুক্ত পারফেক্ট স্ক্রিপ্ট থেকে ফলাফল দেওয়া হয়েছে, যা উপরে বর্ণিতটির মতো পরিস্থিতি তৈরি করে:
Test HEAD^ HEAD
----------------------------------------------------------
5550.4: fetch 11.21(10.42+0.78) 0.08(0.04+0.02) -99.3%
এটি কেবলমাত্র এমন পরিস্থিতিতে প্রযোজ্য যেখানে:
reprepare_packed_git()ব্যয়বহুল করার জন্য আপনার কাছে ক্লায়েন্টের পক্ষে প্রচুর প্যাক রয়েছে (সর্বাধিক ব্যয়বহুল অংশটি একটি অরসোর্টড তালিকায় সদৃশ সন্ধান করছে যা বর্তমানে চতুর্ভুজ) is- আপনার সার্ভার সাইডে প্রচুর ট্যাগ রেফ দরকার যা স্বয়ংক্রিয় অনুসরণের প্রার্থী (যেমন, ক্লায়েন্টটি নেই)। প্রত্যেকে প্যাক ডিরেক্টরি পুনরায় পড়ার জন্য ট্রিগার করে।
- সাধারণ পরিস্থিতিতে ক্লায়েন্ট সেই ট্যাগগুলিকে স্বয়ংক্রিয়ভাবে অনুসরণ করবে এবং এক বৃহত আনার পরে, (২) আর সত্য হবে না।
তবে সেই ট্যাগগুলি যদি ইতিহাসের দিকে ইঙ্গিত করে যা ক্লায়েন্ট অন্যথায় যা নিয়ে আসে তা থেকে সংযোগ বিচ্ছিন্ন হয়ে যায়, তবে এটি কখনই স্বতঃ-অনুসরণ করবে না এবং সেই প্রার্থীরা প্রতিটি আনতে এটি প্রভাব ফেলবে।
Git 2.21 (ফেব্রুয়ারি 2019) একজন রিগ্রেশন প্রচলন করেছে যখন মনে হয় কনফিগ remote.origin.fetchহয় না ডিফল্ট এক ( '+refs/heads/*:refs/remotes/origin/*')
fatal: multiple updates for ref 'refs/tags/v1.0.0' not allowed
গিট 2.24 (Q4 2019) আরেকটি অপ্টিমাইজেশন যুক্ত করেছে।
দেখুন b7e2d8b কমিট (15 সেপ্টেম্বর 2019) দ্বারা Masaya সুজুকি ( draftcode) ।
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে 1d8b0df কমিট , 07 অক্টোবর 2019)
fetch:oidsetদ্রুত অনুসন্ধানের জন্য ওয়ান্ড ওআইডি রাখতে ব্যবহার করুনসময়কালে
git fetch, ক্লায়েন্ট পরীক্ষা করে দেখায় যে বিজ্ঞাপনযুক্ত ট্যাগগুলির ওআইডিগুলি ইতিমধ্যে আনতে অনুরোধটির ওআইডি সেট রয়েছে।
এই চেকটি লিনিয়ার স্ক্যানে করা হয়।
এমন একটি সংগ্রহস্থলের জন্য যেখানে প্রচুর রেফ রয়েছে, এই স্ক্যানটি পুনরাবৃত্তি করতে 15+ মিনিট সময় লাগে।
oid_setএটির গতি বাড়ানোর জন্য, অন্যান্য রেফারেসের ওআইডিগুলির জন্য একটি তৈরি করুন ।
দ্রষ্টব্য: এই উত্তরটি কেবল গিট v1.8 এবং তার চেয়ে বেশি বয়স্কদের জন্য বৈধ।
এর বেশিরভাগই অন্যান্য উত্তর এবং মন্তব্যে বলা হয়েছে, তবে এখানে একটি সংক্ষিপ্ত ব্যাখ্যা দেওয়া হয়েছে:
git fetchসমস্ত শাখা প্রধানগুলি (বা রিমোট.ফ্যাচ কনফিগারেশন বিকল্প দ্বারা নির্দিষ্ট করা), তাদের জন্য প্রয়োজনীয় সমস্ত কমিট এবং এই শাখাগুলি থেকে আসা সমস্ত ট্যাগগুলি আনবে। বেশিরভাগ ক্ষেত্রে, সমস্ত ট্যাগ এইভাবে পৌঁছানো যায়।git fetch --tagsসমস্ত ট্যাগ আনে, তাদের জন্য সমস্ত কমিট করে। এটি শাখা শিরোনামগুলি আপডেট করবে না , এমনকি যে ট্যাগগুলি আনা হয়েছিল সেগুলি থেকে তারা যদি পারা যায়।সংক্ষিপ্তসার: আপনি আনতে যদি কেবল সত্যই ব্যবহার করতে চান তবে আপনি উভয়ই করতে হবে।
কমান্ড-লাইনে টাইপ করার ক্ষেত্রে আপনি যদি বোঝাতে না চান তবে এটি "দ্বিগুণ দ্বিগুণ" নয়, সেক্ষেত্রে এলিয়াসগুলি আপনার সমস্যার সমাধান করে। দুটি অনুরোধ করার ক্ষেত্রে মূলত কোনও ওভারহেড নেই, যেহেতু তারা বিভিন্ন তথ্য জিজ্ঞাসা করছে।
git remote updateআসলে git fetchএবং এর বিকল্প নয় git fetch --tags। git remote updateপরিবর্তিত বিদ্যমান বিদ্যমান ট্যাগগুলি আপডেট করবে না, যদিও এটি নতুন ট্যাগ নিয়ে আসবে। কেবলমাত্র git fetch --tagsইতিমধ্যে বিদ্যমান ট্যাগগুলি আপডেট করবে।
আমি নিজেই এর উত্তর দিতে যাচ্ছি।
আমি স্থির করেছি যে একটি পার্থক্য আছে। "গিট ফেচ - ট্যাগস" সমস্ত ট্যাগ আনতে পারে তবে এটি কোনও নতুন কমিট আনতে পারে না!
দেখা যাচ্ছে যে এটি সম্পূর্ণ "টু টু ডেট" হতে হবে, অর্থাত্ মার্জটি ছাড়াই একটি "গিট টান" প্রতিলিপি:
$ git fetch --tags
$ git fetch
এটি লজ্জাজনক, কারণ এটি দ্বিগুণ slow যদি শুধুমাত্র "Git আনা" কি এটা স্বাভাবিকভাবে নেই যা করতে একটি বিকল্প ছিল এবং সব ট্যাগ আনা।
git remote update myRemoteRepo': এটি দূরবর্তী সামগ্রী এবং ট্যাগগুলি আনবে ?
git fetchসব সময় করি এবং এটি ধারাবাহিকভাবে কোনও নতুন কমিট এবং যে কোনও নতুন ট্যাগ টেনে নামায় । গিটের কোন সংস্করণ আপনি চালাচ্ছেন?
git fetchএই ট্যাগগুলিকে দখল করবে না যেগুলি কোনও শাখার কমিট লগে নেই। jQuery UI এটি একটি রিলিজ ট্যাগে উদাহরণস্বরূপ করে। আমরা একটি করি git checkout -b temp-branch, আমাদের রিলিজ করি, মুক্তির জন্য প্রয়োজনীয় ফাইলগুলি সংযোজন করব, সংস্করণ আপডেট করুন, git commit -m "1.10.x" ; git tag 1.10.x; git push --tagsতারপরে আমরা আমাদের স্থানীয় টেম্প শাখা মুছি। এমন কোনও দূরবর্তী শাখা নেই যা এই ট্যাগটিতে পৌঁছে এবং git fetchএটি কখনও ডাউনলোড করবে না।
এখানে সাধারণ সমস্যা হ'ল এটি git fetchআনা হবে +refs/heads/*:refs/remotes/$remote/*। যদি এই কমিটগুলির মধ্যে কোনওর কাছে ট্যাগ থাকে তবে সেই ট্যাগগুলিও আনা হবে। তবে যদি এমন কোনও ট্যাগ থাকে যা দূরবর্তী কোনও শাখায় পৌঁছানো যায় না তবে সেগুলি আনা হবে না।
--tagsবিকল্পে refspec পরিবর্তন +refs/tags/*:refs/tags/*। আপনি উভয় দখল জিজ্ঞাসা করতে পারেন git fetch। git fetch && git fetch -tআপনি নিচের কমান্ডটি ব্যবহার করতে চাইলে আমি নিশ্চিতভাবেই নিশ্চিত :
git fetch origin "+refs/heads/*:refs/remotes/origin/*" "+refs/tags/*:refs/tags/*"
এবং যদি আপনি এই রেপোর জন্য এটি ডিফল্ট করতে চান, আপনি ডিফল্ট আনতে দ্বিতীয় রেসপেক যোগ করতে পারেন:
git config --local --add remote.origin.fetch "+refs/tags/*:refs/tags/*"
এটি এই রিমোটের জন্য একটি দ্বিতীয় fetch =লাইন যুক্ত করবে .git/config।
একটি প্রকল্পের জন্য এটি পরিচালনা করার উপায়টি খুঁজতে আমি কিছুটা সময় ব্যয় করেছি। এটিই আমি নিয়ে এসেছি।
git fetch -fup origin "+refs/*:refs/*"
আমার ক্ষেত্রে আমি এই বৈশিষ্ট্যগুলি চেয়েছিলাম
refs/*:refs/*+রেফস্পেকের আগে নন-ফাস্ট-ফরোয়ার্ড সহ স্থানীয় শাখা এবং ট্যাগগুলি ওভাররাইট করুন-u-p-f--tagsবিকল্পটি রেফস্পেকটি পরিবর্তন করে " এর জন্য +1 +refs/tags/*:refs/tags/*। যদিও, man git-fetchমনে হয় যে রেডস্পেকটি নির্দিষ্ট +( refs/tags/*:refs/tags/*) ছাড়াই নির্দিষ্ট করেছে ।
remote.origin.fetchডিফল্ট +refs/heads/*:refs/remotes/origin/*, মানে +সংস্করণ, তাই না? (এর অর্থ, উত্স / শাখা ওভাররাইট করা হবে, স্থানীয় / স্থানীয় শাখাগুলি এখনই যেখানেই
git --tagsসময়ে ইতিমধ্যে সমস্ত কিছুর পাশাপাশি ট্যাগ আনা হয়েছিল । @ ভনসির উত্তর দেখুন।
বেশিরভাগ পরিস্থিতিতে, git fetchআপনি যা চান তা করা উচিত, যা 'দূরবর্তী সংগ্রহস্থল থেকে নতুন কিছু পান এবং আপনার স্থানীয় শাখায় মার্জ না করে এটি আপনার স্থানীয় অনুলিপিতে রেখে দিন'। git fetch --tagsএটি হ'ল নতুন ট্যাগ ছাড়া কিছুই পায় না।
সেই অর্থে git fetch --tagsকোনওভাবেই সুপারসেট নয় git fetch। এটা আসলে বিপরীত।
git pullঅবশ্যই, এটি একটি র্যাপার ছাড়া কিছুই নয় git fetch <thisrefspec>; git merge। এটি সুপারিশ করা হয় যে আপনি নিজে লাফিয়ে উঠার আগে ম্যানুয়াল git fetchআইএনিং এবং git mergeআইএনএন করার অভ্যস্ত হয়ে পড়ুন git pullকারণ এটি আপনাকে git pullপ্রথমে কী করছে তা বুঝতে সহায়তা করে ।
যা বলা হচ্ছে, সম্পর্ক ঠিক তেমন একই সাথে git fetch। git pullএর সুপারস্টার git pull --tags।
git pullনেই না পেতে সব ট্যাগ কিন্তু বর্তমান শাখা মাথা থেকে কেবলমাত্র সেই পৌঁছানো। যাইহোক, git pull --tagsসমস্ত ট্যাগ আনা এবং দৃশ্যত সমতুল্য git fetch --tags।
git fetch upstream --tags
ঠিকঠাক কাজ করে, এটি কেবলমাত্র নতুন ট্যাগ পাবে এবং অন্য কোনও কোড বেস পাবে না।
upstreamসাধারণত বলা হয় origin। আমি মনে করি upstreamগিটহাব দ্বারা ব্যবহৃত একটি নাম। যাই হোক না কেন, ব্যবহারের নামটি দেখানো একটি git remote।