সরল কথায়, আপনি যদি কোনও ইন্টারনেট সংযোগ ছাড়াই কোনও প্লেনে চড়ে যেতে চলেছিলেন ... ছাড়ার আগে আপনি ঠিক করতে পারতেন git fetch origin <master>
। এটি আপনার কম্পিউটারে সমস্ত পরিবর্তন আনবে তবে এটিকে আপনার স্থানীয় বিকাশ / কর্মক্ষেত্র থেকে আলাদা রাখবে।
বিমানে, আপনি আপনার স্থানীয় কর্মক্ষেত্রে পরিবর্তন করতে পারেন এবং তারপরে যা আপনি এনেছিলেন তা দিয়ে এটি মার্জ করে এবং ইন্টারনেটের সাথে কোনও সংযোগ ছাড়াই সম্ভাব্য মার্জ সংঘাতগুলি সমাধান করতে পারেন। এবং যদি না কেউ রিমোট রিপোজিটরিতে নতুন বিরোধী পরিবর্তন না করে থাকে তবে একবার আপনি গন্তব্যে পৌঁছে আপনি git push origin <branch>
কফি নিয়ে যান।
দুর্দান্ত এই আটলসিয়ান টিউটোরিয়াল থেকে :
git fetch
কমান্ড ডাউনলোডসমূহ করে, ফাইল ও refs আপনার স্থানীয় সংগ্রহস্থলের মধ্যে একটি দূরবর্তী সংগ্রহস্থল থেকে।
অন্য সবাই কী কাজ করছে তা আপনি যখন দেখতে চান তখন আনতে হয়। এটি এসভিএন আপডেটের মতোই এটি কেন্দ্রীয় ইতিহাসে কীভাবে অগ্রগতি হয়েছে তা আপনাকে দেখতে দেয় তবে এটি আপনাকে বাস্তবে পরিবর্তনগুলি আপনার ভান্ডারগুলিতে একীভূত করতে বাধ্য করে না। গিট বিদ্যমান স্থানীয় সামগ্রী থেকে একটি হিসাবে আনা বিষয়বস্তু বিচ্ছিন্ন করে , এটি আপনার স্থানীয় উন্নয়ন কাজের উপর একেবারে
প্রভাব ফেলে না । আনীত সামগ্রীটি স্পষ্টভাবে git checkout
কমান্ডটি ব্যবহার করে চেক আউট করতে হবে । এটি আপনার স্থানীয় সংগ্রহস্থলের সাথে সংহত করার আগে কমিটগুলি পর্যালোচনা করার একটি নিরাপদ উপায়ে নিয়ে আসে।
কোনও রিমোট রিপোজিটরি থেকে সামগ্রী ডাউনলোড করার সময় git pull
এবং git fetch
কমান্ডগুলি কার্য সম্পাদনের জন্য উপলব্ধ। আপনি git fetch
দুটি কমান্ডের 'নিরাপদ' সংস্করণ বিবেচনা করতে পারেন
। এটি রিমোট সামগ্রীটি ডাউনলোড করবে, তবে আপনার বর্তমান কাজ অক্ষত রেখে আপনার স্থানীয় সংগ্রহস্থলের কার্য স্থিতি আপডেট করবে না। git pull
আরও আক্রমণাত্মক বিকল্প, এটি সক্রিয় স্থানীয় শাখার জন্য দূরবর্তী সামগ্রী ডাউনলোড করবে git merge
এবং নতুন দূরবর্তী সামগ্রীর জন্য একীভূত অঙ্গীকার তৈরি করতে তাত্ক্ষণিকভাবে কার্যকর করবে। আপনার যদি অগ্রগতিতে পরিবর্তনগুলি মুলতুবি থেকে থাকে তবে এটি দ্বন্দ্ব সৃষ্টি করবে এবং একীভূত বিরোধ নিষ্পত্তি প্রবাহকে কিকঅফ করবে।
সহ git pull
:
- আপনি কোন বিচ্ছিন্নতা পাবেন না।
- এটি আপনার স্থানীয় বিকাশকে প্রভাবিত করে।
- এটি পরিষ্কারভাবে চেক আউট করার প্রয়োজন হয় না। কারণ এটি সুস্পষ্টভাবে একটি
git merge
।
- এটি মূলত নিরাপদ নয়। এটা আক্রমণাত্মক।
git fetch
এটি কেবল যেখানে আপনার প্রভাবিত করে তার বিপরীতে .git/refs/remotes
, গিট টান আপনার এবং উভয়কেই প্রভাবিত করবে.git/refs/remotes
.git/refs/heads/
হুমম ... তাই যদি আমি ওয়ার্কিং কপিটি সাথে আপডেট না করে git fetch
থাকি তবে আমি কোথায় পরিবর্তন করছি? গিট ফেচ নতুন নতুন কমিটগুলি কোথায় সঞ্চয় করবে?
দুর্দান্ত প্রশ্ন। এটি আপনার কাজের অনুলিপি থেকে এটি কোথাও বিচ্ছিন্ন করে দেয়। তবে আবার কোথায়? খুঁজে বের কর.
আপনার প্রকল্প ডিরেক্টরিতে (যেমন, যেখানে আপনি আপনার git
আদেশগুলি করেন) করুন:
ls
। এটি ফাইল এবং ডিরেক্টরিগুলি দেখায়। কিছুই ঠাণ্ডা, আমি জানি।
এখন কি ls -a
। এই প্রদর্শন করবে ডট ফাইল , অর্থাত্, শুরু ফাইল .
এর পরে নামে একজন ডিরেক্টরি দেখতে সক্ষম হবে: .git
।
- কি
cd .git
। এটি স্পষ্টতই আপনার ডিরেক্টরি পরিবর্তন করবে।
- এখন আসছে মজার ব্যাপারটি; না
ls
। আপনি ডিরেক্টরিগুলির একটি তালিকা দেখতে পাবেন। আমরা খুঁজছেন refs
। কি cd refs
।
- সমস্ত ডিরেক্টরিতে কী রয়েছে তা দেখতে আকর্ষণীয়, তবে আসুন আমরা তাদের দুটিতে ফোকাস করি।
heads
এবং remotes
। cd
তাদের ভিতরেও পরীক্ষা করতে ব্যবহার করুন ।
-
git fetch
আপনি যে কোনও কাজ করুন /.git/refs/remotes
ডিরেক্টরিতে আইটেম আপডেট করবে । এটি /.git/refs/heads
ডিরেক্টরিতে কোনও কিছুই আপডেট করবে না ।
- যে কোনও
git pull
প্রথমে ডিরেক্টরিতে git fetch
আইটেম আপডেট করবে /.git/refs/remotes
, তারপরে আপনার স্থানীয় সাথে একীভূত হবে এবং তারপরে /.git/refs/heads
ডিরেক্টরিটির ভিতরে মাথা পরিবর্তন করবে ।
একটি খুব ভাল সম্পর্কিত উত্তর পাওয়া যাবে যেখানে 'গিট ফেচ' নিজেই রাখে? ।
এছাড়াও, গিট শাখার নামকরণ কনভেনশন পোস্ট থেকে "স্ল্যাশ স্বরলিপি" সন্ধান করুন । গিট কীভাবে বিভিন্ন ডিরেক্টরিতে জিনিস রাখে তা আপনাকে আরও ভালভাবে বুঝতে সহায়তা করে।
আসল পার্থক্য দেখতে
শুধু কর:
git fetch origin master
git checkout master
যদি রিমোট মাস্টার আপডেট করা থাকে তবে আপনি এই জাতীয় বার্তা পাবেন:
Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
আপনি যদি না করেন fetch
এবং ঠিক করেন না git checkout master
তবে আপনার স্থানীয় গিটটি জানতে পারে না যে সেখানে 2 টি কমিট যুক্ত রয়েছে। এবং এটি কেবল বলবে:
Already on 'master'
Your branch is up to date with 'origin/master'.
তবে এটি পুরানো এবং ভুল। এটি কারণ গিট আপনাকে যা জানবে তার উপর ভিত্তি করে আপনাকে প্রতিক্রিয়া জানাবে। এটি নতুন প্রতিশ্রুতিবদ্ধ হওয়া সম্পর্কে অবগত যে এটি এখনও টানেনি ...
স্থানীয়ভাবে শাখায় কাজ করার সময় রিমোটে করা নতুন পরিবর্তনগুলি দেখার কোনও উপায় আছে কি?
কিছু আইডিই (যেমন এক্সকোড) দুর্দান্ত স্মার্ট এবং এ এর ফলাফল ব্যবহার করে git fetch
এবং আপনার বর্তমান কার্যকারী শাখার দূরবর্তী শাখায় পরিবর্তন করা কোডগুলির লাইনগুলি বর্নিত করতে পারে। যদি সেই লাইনটি স্থানীয় পরিবর্তন এবং দূরবর্তী শাখা উভয় দ্বারা পরিবর্তিত হয়, তবে সেই রেখাটি লাল দিয়ে টীকায়িত হয়। এটি মার্জ সংঘাত নয়। এটি একটি সম্ভাব্য সংহত সংঘাত। এটি এমন একটি শীর্ষস্থান যা আপনি git pull
দূরবর্তী শাখা থেকে করার আগে ভবিষ্যতের মার্জ সংঘাত সমাধানের জন্য ব্যবহার করতে পারেন ।
মজাদার টিপ:
যদি আপনি একটি দূরবর্তী শাখা এনেছেন যেমন:
git fetch origin feature/123
তারপরে এটি আপনার রিমোট ডিরেক্টরিতে যাবে। এটি এখনও আপনার স্থানীয় ডিরেক্টরিতে উপলভ্য নয়। যাইহোক, এটি আপনার চেকআউটটিকে ডিএমআইআইএম দ্বারা দূরবর্তী শাখায় সরল করে তোলে (আমি যা বলতে চাই তা করুন):
git checkout feature/123
আপনার আর করার দরকার নেই:
git checkout -b feature/123 origin/feature/123
আরও পড়ুন এখানে