টিএল; ডিআর সংস্করণ: রিমোট-ট্র্যাকিং শাখা origin/masterবিদ্যমান ছিল, তবে এখন নেই, তাই স্থানীয় শাখা sourceএমন কিছু ট্র্যাক করছে যা অস্তিত্বহীন, যা সন্দেহজনক — এর অর্থ একটি আলাদা গিট বৈশিষ্ট্য আপনার জন্য কিছু করতে অক্ষম — এবং গিট আপনাকে এ সম্পর্কে সতর্ক করছে। "আপস্ট্রিম ট্র্যাকিং" বৈশিষ্ট্যটি যেমন কাজ করা হয়েছে ঠিক তেমন না করেই আপনি ঠিকঠাক হয়ে যাচ্ছেন, সুতরাং কিছু পরিবর্তন করা উচিত কিনা তা আপনার বিষয় up
অন্য প্রবাহের সেটিংস গ্রহণের জন্য, কেন আমাকে "গিট পুশ - সেট-আপস্ট्रीम উত্স <ব্র্যাঞ্চ>" করতে হবে তা দেখুন?
এই সতর্কতাটি গিটে একটি নতুন জিনিস, গিট 1.8.5-এ প্রথম প্রদর্শিত হবে। রিলিজ নোটগুলি সম্পর্কে এটি সম্পর্কে একটি মাত্র শর্ট বুলেট-আইটেম রয়েছে:
- "গিট শাখা -v -v" (এবং "গিট স্ট্যাটাস") অন্য কোনও শাখার উপর ভিত্তি করে নেই এমন একটি শাখার মধ্যে পার্থক্য করে না, একটি শাখা যা তার প্রবাহের শাখার সাথে সুসংগত থাকে এবং একটি শাখা যা একটি প্রবাহের সাথে কনফিগার করা হয় শাখা যা আর বিদ্যমান নেই।
এর অর্থ কী তা বর্ণনা করতে আপনাকে প্রথমে "রিমোটস", "রিমোট-ট্র্যাকিং শাখা" এবং গিট কীভাবে "একটি প্রবাহকে ট্র্যাকিং" পরিচালনা করে তা সম্পর্কে জানতে হবে। ( রিমোট-ট্র্যাকিং শাখাগুলি একটি মারাত্মক ত্রুটিযুক্ত শব্দ instead আমি পরিবর্তে দূরবর্তী ট্র্যাকিংয়ের নামগুলি ব্যবহার শুরু করেছি, যা আমার সামান্য উন্নতি বলে মনে হয় though নীচে, যদিও আমি গিট ডকুমেন্টেশনের সাথে সামঞ্জস্য করার জন্য "রিমোট-ট্র্যাকিং শাখা" ব্যবহার করব)। )
প্রতিটি "রিমোট" কেবল একটি নাম, যেমন originবা octopressএই ক্ষেত্রে। তাদের উদ্দেশ্য হ'ল আপনি git fetchবা git pullআপডেট হওয়া জায়গাগুলির পুরো URL এর মতো জিনিস রেকর্ড করা । আপনি যখন 1 গিট ব্যবহার করেন তখন সেই রিমোটে যায় (সংরক্ষিত ইউআরএল ব্যবহার করে) এবং যথাযথ আপডেটের সেট নিয়ে আসে। এটি "রিমোট-ট্র্যাকিং শাখা" ব্যবহার করে আপডেটগুলিও রেকর্ড করে।git fetch remote,
একটি "রিমোট-ট্র্যাকিং শাখা" (বা রিমোট-ট্র্যাকিং নাম) কেবল কোনও "রিমোট" -তে সর্বশেষে দেখা হিসাবে একটি শাখার নাম রেকর্ডিং। প্রতিটি দূরবর্তী নিজেই একটি গিট সংগ্রহস্থল, তাই এর শাখা রয়েছে। দূরবর্তী "উত্স" এর শাখাগুলি আপনার স্থানীয় ভাণ্ডারগুলিতে রেকর্ড করা আছে remotes/origin/। টেক্সট আপনাকে দেখিয়েছি বলেছেন নামে একটি শাখা আছে যে sourceউপর origin, এবং শাখা নামে 2.1, linklog, এবং আরো অনেক কিছু octopress।
(একটি "সাধারণ" বা "স্থানীয়" শাখা অবশ্যই একটি শাখা-নাম যা আপনি নিজের সংগ্রহস্থলে তৈরি করেছেন))
সর্বশেষে, আপনি "ট্র্যাক" একটি "রিমোট-ট্র্যাকিং শাখা" করতে একটি (স্থানীয়) শাখা সেট আপ করতে পারেন। একবার স্থানীয় শাখা Lরিমোট-ট্র্যাকিং শাখার ট্র্যাক করার জন্য সেট করা গেলে R, গিট Rতার "আপস্ট্রিম" কল করবে এবং আপনাকে বলবে যে আপনি "এগিয়ে" এবং / অথবা "পিছনে" প্রবাহিত (কমিটের ক্ষেত্রে)। স্থানীয় শাখা এবং রিমোট-ট্র্যাকিং শাখাগুলির একই নাম (দূরবর্তী উপসর্গটি বাদে) ব্যবহার করার মতো এটি স্বাভাবিক (এমনকি প্রস্তাবনা-সক্ষম ) sourceও এবং পছন্দ করা origin/sourceতবে এটি আসলে প্রয়োজনীয় নয়।
এবং এই ক্ষেত্রে, এটি ঘটছে না। আপনার কাছে একটি স্থানীয় শাখা রয়েছে যা sourceএকটি দূরবর্তী ট্র্যাকিং শাখা ট্র্যাক করে origin/master।
গিট কীভাবে কোনও দূরবর্তী শাখার ট্র্যাক করার জন্য স্থানীয় একটি শাখা স্থাপন করে তার সঠিক যান্ত্রিকতাগুলি আপনার জানা উচিত নয় , তবে তারা নীচে প্রাসঙ্গিক, সুতরাং আমি কীভাবে এটি কাজ করে তা দেখাব। আমরা আপনার স্থানীয় শাখার নাম দিয়ে শুরু করি source,। দুটি কনফিগারেশন এই নাম, বানান ব্যবহার এন্ট্রি branch.source.remoteএবং branch.source.merge। আপনি যে আউটপুটটি দেখিয়েছেন তা থেকে এটি স্পষ্ট হয়ে গেছে যে এগুলি দুটিই সেট, যাতে আপনি প্রদত্ত আদেশগুলি দৌড়ে নিলে নিম্নলিখিতটি দেখতে পাবেন:
$ git config --get branch.source.remote
origin
$ git config --get branch.source.merge
refs/heads/master
এগুলি একসাথে রেখে 2 এটি গিটকে বলে যে আপনার শাখাটি sourceআপনার "রিমোট-ট্র্যাকিং শাখা" ট্র্যাক করে origin/master।
তবে এখন আউটপুটটি দেখুন git branch -a, যা আপনার সংগ্রহস্থলের সমস্ত স্থানীয় এবং দূরবর্তী-ট্র্যাকিং শাখার নাম দেখায়। রিমোট-ট্র্যাকিংয়ের নামগুলি নীচে তালিকাভুক্ত করা হয়েছে remotes/... এবং নেইremotes/origin/master । সম্ভবত এক সময় ছিল, কিন্তু এখন এটি শেষ।
গিট আপনাকে জানিয়ে দিচ্ছে যে এর সাহায্যে আপনি ট্র্যাকিংয়ের তথ্য সরিয়ে ফেলতে পারেন --unset-upstream। এই উভয় আউট সাফ করবে branch.source.originএবং branch.source.merge, এবং সতর্কবার্তা বন্ধ করুন।
এটা তোলে মোটামুটি সম্ভবত মনে হচ্ছে যে আপনি যা চান তা, যদিও, হয় সুইচ নির্ণয় করা থেকে origin/masterঅন্য কিছু ট্র্যাকিং: সম্ভবত origin/source, কিন্তু হয়তো এক octopress/নাম।
আপনার সাথে এটা করতে পারেন git branch --set-upstream-to, 3 উদাহরণ:
$ git branch --set-upstream-to=origin/source
(ধরে নিই যে আপনি এখনও শাখা "উত্স" এ রয়েছেন, এবং origin/sourceএটিই আপনার প্রবাহিত প্রবাহ — তবে কোনটি আসলে আপনি চান তা বলার উপায় নেই)।
(এছাড়াও আপনি কীভাবে একটি বিদ্যমান গিট শাখা একটি দূরবর্তী শাখাকে ট্র্যাক করেন? দেখুন )
আমি মনে করি আপনি এখানে যেভাবে এসেছেন তা হ'ল আপনি যখন প্রথম কাজটি করেছিলেন git clone, তখন আপনি ক্লোনড করেছেন এমন জিনিসটির একটি শাখা ছিল master। আপনার একটি শাখাও ছিল master, যা ট্র্যাক করার জন্য সেট করা হয়েছিল origin/master(এটি গিটের জন্য একটি সাধারণ, মানক সেটআপ)। এর অর্থ আপনি ছিল branch.master.remoteএবং branch.master.mergeসেট, এর originএবং refs/heads/master। কিন্তু তারপর আপনার originদূরবর্তী থেকে তার নাম পরিবর্তন করে masterকরা source। মেলানোর জন্য, আমি বিশ্বাস করি আপনি নিজের স্থানীয় নামও বদলে masterদিয়েছেন source। এই পরিবর্তিত নাম থেকে আপনার সেটিংস, branch.master.remoteকরতে branch.source.remoteএবং থেকে branch.master.mergeথেকে branch.source.merge... কিন্তু এটা পুরানো বাম মান , তাই branch.source.mergeএখন ভুল ছিল।
এই সময়ে "আপস্ট্রিম" সংযোগটি ভেঙেছিল, তবে 1.8.5 এর চেয়ে পুরানো গিট সংস্করণগুলিতে, গিট কখনও ভাঙা সেটিংটি লক্ষ্য করেনি। এখন আপনার 1.8.5 রয়েছে, এটি এটি নির্দেশ করছে।
এটি বেশিরভাগ প্রশ্নকে কভার করে, তবে "আমাকে এটি ঠিক করার দরকার কি" তা নয়। সম্ভবত আপনি এখন ধরে বছরের পর বছর ধরে ভাঙা নীড় ঘিরে কাজ করে যাচ্ছেন (যেমন, )। যদি আপনি এটি চালিয়ে যেতে থাকেন তবে এটি সমস্যাটি নিয়ে কাজ করে চলেছে — সুতরাং, না, আপনার এটি ঠিক করার দরকার নেই । আপনি যদি চান তবে আপনি প্রবাহটি সরাতে এবং অভিযোগগুলি বন্ধ করতে ব্যবহার করতে পারেন, এবং স্থানীয় শাখাটি কোনও প্রবাহকে একেবারেই চিহ্নিত করা যাবে না ।git pull remote branchgit pull origin source--unset-upstreamsource
একটি প্রবাহিত হওয়ার বিষয়টি হ'ল বিভিন্ন ক্রিয়াকলাপকে আরও সুবিধাজনক করে তোলা। উদাহরণস্বরূপ, git fetchদ্বারা অনুসরণ git mergeসাধারণত "সঠিক জিনিস করতে" হবে মূল প্রজেক্টের সঠিকভাবে সেট হয় যদি, এবং git statusপরে git fetchআপনার রেপো যে শাখা জন্য, মূল প্রজেক্টের এক সাথে মিলে যায় কিনা আপনাকে বলতে হবে।
আপনি যদি সুবিধাটি চান তবে প্রবাহটিকে পুনরায় সেট করুন।
1git pull ব্যবহার করে git fetchএবং গিট 1.8.4 এর হিসাবে এটি (শেষ পর্যন্ত!) "রিমোট-ট্র্যাকিং শাখা" তথ্যও আপডেট করে। গিটের পুরানো সংস্করণগুলিতে, আপডেটগুলি git pullকেবলমাত্র সহ, রিমোট-ট্র্যাকিং শাখায় রেকর্ড হয় নি git fetch। আপনার গিটটি অবশ্যই কমপক্ষে 1.8.5 সংস্করণ হওয়া উচিত এটি আপনার পক্ষে কোনও সমস্যা নয়।
2 ঠিক আছে, এই প্লাস এমন একটি কনফিগারেশন লাইন আমি ইচ্ছাকৃতভাবে উপেক্ষা করছি যা এর নীচে পাওয়া গেছে remote.origin.fetch। দূরবর্তী-শাখার পুরো স্থানীয় নামটি খুঁজে বের করতে গিটকে "মার্জ" নামটি মানচিত্র করতে হবে refs/remotes/origin/master। ম্যাপিং প্রায় সবসময়, শুধু এই মত কাজ করে যদিও, তাই এটি যে আন্দাজের এর masterযায় origin/master।
3 বা, সাথে git config। আপনি যদি কেবলমাত্র প্রবাহটিকে origin/sourceকেবলমাত্র সেই অংশে সেট করতে চান যা পরিবর্তন
করতে হবে branch.source.mergeএবং git config branch.source.merge refs/heads/sourceতা করবে। তবে আপনাকে যা করতে চান তা --set-upstream-toবলছেন না, আপনাকে নিজে করে দেওয়ার পরিবর্তে এটি নিজেই করুন, সুতরাং এটি একটি "আরও ভাল উপায়"।