গিট দূরবর্তী আপডেট এবং আনার মধ্যে পার্থক্য?


উত্তর:


110

আপডেট: আরও তথ্য!

আমার প্রথম থেকেই এটি করা উচিত ছিল: আমি গিটের গিট রেপোতে গিট রিলিজ নোটগুলিকে গ্রেপ্তার করেছি (তাই মেটা!)

grep --color=always -R -C30 fetch Documentation/RelNotes/* | less

তারপরে আমি lessঅনুসন্ধান করেছি --allএবং এটিই আমি গিট সংস্করণ ১..6..6 এর রিলিজ নোটের আওতায় পেয়েছি :

git fetchশিখেছি --allএবং --multipleবিকল্পগুলি, অনেকগুলি সংগ্রহস্থল থেকে আনার জন্য চালানো এবং --pruneবাসি হয়ে যাওয়া দূরবর্তী ট্র্যাকিং শাখাগুলি সরানোর বিকল্প। এগুলি তৈরি git remote updateএবং git remote pruneকম প্রয়োজনীয় (সরানোর কোনও পরিকল্পনা নেই remote updateএবং remote pruneযদিও)।

সংস্করণ 1.6.6 ২৩ শে ডিসেম্বর, ২০০৯ পর্যন্ত প্রকাশিত হয়নি এবং আসল পোস্টার ২০০৯ সালের asked ই ডিসেম্বর তার প্রশ্ন জিজ্ঞাসা করেছিল।

আপনি যেমন প্রকাশের নোটগুলি থেকে দেখতে পাচ্ছেন, গিটের লেখকরা এই সত্যটি সম্পর্কে সচেতন ছিলেন যে git remote updateকমান্ড কার্যকারিতাটি কিছুটা নকল হয়ে গিয়েছিল git fetchতবে তারা এটি সরিয়ে না নেওয়ার সিদ্ধান্ত নিয়েছে, সম্ভবত বিদ্যমান স্ক্রিপ্টগুলি এবং প্রোগ্রামগুলির সাথে পশ্চাদপদ সামঞ্জস্যের জন্য, বা সম্ভবত এটি মাত্র অনেক বেশি কাজ এবং উচ্চতর অগ্রাধিকার আইটেম রয়েছে।


আরও বিশদ সহ আসল উত্তর

xenoterracide এর উত্তর এখন 3.5 বছরের পুরানো, এবং গিট তখন থেকেই বেশ কয়েকটি সংস্করণে চলে গেছে (এটি এই লেখার হিসাবে v1.6.5.5 থেকে v1.8.3.2 এ চলে গেছে ), এবং বর্তমান ডকুমেন্টেশনের দিকে তাকিয়ে আছে git remote updateএবং git fetchএটি দেখে মনে হচ্ছে যেমন তারা উভয়ই মূল বিকল্পগুলি এবং যুক্তি দিয়ে একাধিক রিমোটগুলি থেকে নতুন কমিট আনার একই ফাংশন সম্পাদন করতে পারে।

সমস্ত রিমোট সংগ্রহ করা হচ্ছে

একাধিক রিমোট আনার একটি উপায় --allপতাকা সহকারে :

git fetch --all

এটি আপনার সমস্ত কনফিগার করা রিমোটগুলি থেকে ধরে নেওয়া হবে, ধরে নেওয়া হবে যে আপনি remote.<name>.skipFetchAllতাদের জন্য সেট করেননি:

সত্য হিসাবে, গিট-ফেচ (1) বা গিট-রিমোট (1) এর আপডেট সাবকম্যান্ড ব্যবহার করে আপডেট করার সময় এই রিমোটটি ডিফল্টরূপে এড়িয়ে যায় । - গিট কনফিগার ডকুমেন্টেশন

এটি ব্যবহারের সমতুল্য হবে

git remote update

আনার জন্য কোনও দূরবর্তী গ্রুপ উল্লেখ না করে remotes.defaultএবং আপনার রেপো কনফিগারেশনে সেট না করে এবং আপনার প্রত্যন্তগুলির কোনওোটাই remote.<name>.skipDefaultUpdateসত্য হয়ে যায় নি।

গীত কনফিগারেশন জন্য বর্তমান 1.8.3.2 ডকুমেন্টেশন উল্লেখ না remotes.defaultসেটিং, কিন্তু আমি এটা সম্পর্কে পরাক্রমশালী গুগল আলোচনা থেকে এই সহায়ক ব্যাখ্যা পাওয়া Mislav Marohnić :

$ git config remotes.default 'origin mislav staging'
$ git remote update

# fetches remotes "origin", "mislav", and "staging"

remote updateকমান্ড দ্বারা আনার জন্য আপনি রিমোটগুলির একটি ডিফল্ট তালিকা নির্ধারণ করতে পারেন । এগুলি আপনার সতীর্থ, কোনও ওপেনসোর্স প্রকল্পের বিশ্বস্ত সম্প্রদায়ের সদস্যদের কাছ থেকে দূরবর্তী হতে পারে similar

সুতরাং সম্ভবতঃ, যদি আপনি remotes.defaultসেট করে রেখেছেন এবং আপনার সমস্ত রিমোট এতে তালিকাভুক্ত না হয়ে থাকে, তবে git remote updateআপনার রেপো "সচেতন" এমন সমস্ত রিমোটগুলি আনবে না।

হিসাবে remote.<name>.skipDefaultUpdateসেটিং গীত ডক্স এটা thusly ব্যাখ্যা:

সত্য হিসাবে, গিট-ফেচ (1) বা গিট-রিমোট (1) এর আপডেট সাবকম্যান্ড ব্যবহার করে আপডেট করার সময় এই রিমোটটি ডিফল্টরূপে এড়িয়ে যায় ।

দূরবর্তীগুলির একটি নির্দিষ্ট গোষ্ঠী আনয়ন

সব রিমোটের আনার সময় পরিবর্তে উভয় fetchএবং remote updateআপনি একাধিক remotes ব্যবহার এবং remotes ব্যবহার আনতে দলের নির্দিষ্ট করার অনুমোদন দেবে:

git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]

git fetch [<options>] <group>আপনাকে একাধিক রিমোট আনতে দেয় যা একটি গোষ্ঠীর অংশ ( মেসালভের থেকে অন্য উদাহরণ ধার করতে ):

$ git config remotes.mygroup 'remote1 remote2 ...'
$ git fetch mygroup

git fetch --multipleএকবারে ( ডক্স থেকে ) আনতে আপনাকে বেশ কয়েকটি সংগ্রহস্থল এবং সংগ্রহস্থল গোষ্ঠী নির্দিষ্ট করার অনুমতি দেয় :

বেশ কয়েকটি <repository>এবং <group>তর্কগুলি নির্দিষ্ট করার অনুমতি দিন । কোন <refspec>sনির্দিষ্ট করা যেতে পারে।

git remote updateডকুমেন্টেশনে অস্পষ্টতা

জন্য সারসংক্ষেপgit remote update নির্দিষ্ট করে কমান্ড সিনট্যাক্স নিম্নরূপ যে:

git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]

শেষ অংশ লক্ষ্য করুন [(<group> | <remote>)…],? পিছনের বিন্দুগুলি ...বোঝায় যে আপনি একাধিক গোষ্ঠী এবং কমান্ডটি ব্যবহার করে রিমোটগুলি নির্দিষ্ট করতে পারবেন, যার অর্থ এটি একইরূপে আচরণ করবে git fetch --multiple... দেখুন কীভাবে উভয়ের মধ্যে সিনট্যাক্স এতটা সমান?

তবে, একই নথিতে, updateকমান্ডের ব্যাখ্যায় একাধিক গ্রুপ এবং দূরবর্তী যুক্তি নির্দিষ্ট করে দেওয়ার বিষয়ে কিছুই বলা হয়নি, কেবল এটি

দ্বারা নির্ধারিত হিসাবে সংগ্রহস্থলের রিমোটগুলির একটি নামক সেটের জন্য [এস] আপডেটগুলি আনুন remotes.<group>

সুতরাং এটি স্পষ্ট নয় যে একাধিক স্বতন্ত্র রিমোট এবং একাধিক দূরবর্তী গোষ্ঠীগুলির নির্দিষ্টকরণের ক্ষেত্রে git remote updateএকইভাবে কাজ git fetch --multipleকরে।

একক রিমোট আনছে

অবশেষে, একক রিমোট আনার সাধারণ ঘটনাটি প্রত্যেকেই জানেন:

git fetch <remote>

এটি আপনি ব্যবহার করতে পারেন যে ক্ষেত্রে হতে পারে

git remote update <remote>

একই জিনিসটি করার জন্য, তবে আমি যেমন পূর্ববর্তী বিভাগে উল্লেখ করেছি, ডকুমেন্টেশনটি কমান্ডের সাথে git remote updateএকক গ্রুপের রিমোটগুলি ছাড়া অন্য কোনও কিছু পাওয়া সম্ভব কিনা সে সম্পর্কে অস্পষ্ট ।

শেষ করি

আমি যেমন ব্যাখ্যা করেছি git fetchএবং git remote updateএকাধিক রিমোট থেকে আনার ক্ষেত্রে একইরকম আচরণ করব। তারা অনুরূপ সিনট্যাক্স এবং তর্কগুলি ভাগ করে নিলেও git fetchসংক্ষিপ্ত, তাই লোকেরা সম্ভবত এটি টাইপ করা এবং ব্যবহার করা সহজ করে।

এটি এমন ক্ষেত্রে হতে পারে যা git remote updateকেবলমাত্র একটি একক দূরবর্তী আনতে ব্যবহার করা যায় না git fetch, তবে আমি উল্লেখ করেছি যে ডকুমেন্টেশনটি এটি পরিষ্কার করে না।

সরাইয়া

গিট পোরস্লেইন কমান্ডগুলির মধ্যে কার্যকারিতাটির অনুলিপি, এর দ্বারা git fetchএবং git remote updateউপরে উদাহরণ দিয়ে দেওয়া , অনন্য নয়। আমি একই অবস্থা লক্ষ্য করেছি git rebase --ontoএবং git cherry-pick, যে উভয় একটি নতুন বেস কমিট সম্মুখের প্যাচ করার জন্য বদ্ধ পরিকর একটি সীমার গ্রহণ করতে পারেন।

আমি অনুমান করি যে কয়েক বছর ধরে গিট যেমন বিবর্তিত হয়েছে, কিছু কার্যকারিতা (অনিবার্যভাবে?) নকল করা হয়েছিল, সম্ভবত কখনও কখনও শেষ-ব্যবহারকারীদের সুবিধার্থে (উদাহরণস্বরূপ, cherry-pickএকক প্রতিশ্রুতি বার বার করার চেয়ে, একটি রেঞ্জটি পাস করা সহজ) ler একটি ব্যাপ্তি বাছাই করতে)। V1.7.2 রিলিজ নোটগুলিতে বর্ণিতcherry-pick হিসাবে দৃশ্যত সবসময় কমিটস এর কিছু পরিসীমা গ্রহণ করেনি :

git cherry-pickঅনেকগুলি কমিট (যেমন cherry-pick A..Bএবং cherry-pick --stdin) বাছাই করতে শিখেছি , তাই করেছে git revert; rebase [-i]যদিও এগুলি উত্তম সিকোয়েন্সিং নিয়ন্ত্রণটিকে সমর্থন করে না ।


4
অবগতির জন্য: git rebaseভালো হয় mvএবং git cherry-pickভালো হয় cp--ontoসুইচ যে পরিবর্তন করবেন না। আপনি git rebaseকেবলমাত্র SHA1 টি মান উল্লেখ করলেই আপনি অনুলিপি পেতে পারেন, অন্যথায় আপনার শাখাটি সরানো হবে!
রবার্ট সিমার

141

হ্যা এবং না. git remote updateকেবলমাত্র একটি নয়, সমস্ত রিমোট থেকে নেওয়া।

কোডটি না দেখে remote updateএটি দেখতে কেবল শেল স্ক্রিপ্ট (সম্ভব) এটি, মূলত, প্রতিটি রিমোটের জন্য আনতে চলে। git fetchঅনেক বেশি দানাদার হতে পারে।


3
চলার সময় কোন রিমোটগুলি আনতে হবে তা আপনি কনফিগার করতে পারেন git remote update, গিট-রিমোট মানচিত্রটি দেখুন।
জাকুব নরবস্কি

ঘটনাচক্রে, git remoteএটি কোনও শেল স্ক্রিপ্ট নয়, তবে এটি git fetchএকটি এর মধ্যে ছড়িয়ে পড়ে remote update
মিপাদি

1
একটি জন্য সমতুল্য git fetchকমান্ড বিকল্প আছে git remote update?
টিউলার

15
@tuler হ্যাঁ: এটাgit fetch --all
লোকি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.