টি এল; ডিআর: git branch --set-upstream-to origin/solaris
প্রশ্ন আপনাকে জিজ্ঞাসা যা আমি একটু ভিন্নভাবে প্রকাশ করব যেমন -is "আমি একটি আপস্ট্রিম সেট করতে না" উত্তর: না, আপনি না আছে এ সব একটি আপস্ট্রিম সেট করতে।
আপনার যদি বর্তমান শাখার উপরিভাগ না থাকে তবে গিট এর আচরণ git push
এবং অন্য কমান্ডগুলিতেও তার আচরণ পরিবর্তন করে ।
এখানে সম্পূর্ণ পুশ স্টোরিটি দীর্ঘ এবং বিরক্তিকর এবং ইতিহাসে গিট সংস্করণ 1.5 এর আগে ফিরে যায়। এটি পুরোপুরি সংক্ষিপ্ত করার জন্য, git push
খারাপভাবে প্রয়োগ করা হয়েছিল। 1 গিট সংস্করণ ২.০ হিসাবে, গিতে এখন একটি কনফিগারেশন নোব বানানো রয়েছে push.default
যা এখন ডিফল্ট simple
। ২.০ এর আগে ও পরে গীতের বেশ কয়েকটি সংস্করণের জন্য, প্রতিবার আপনি যখন ছুটেছেন git push
, গিট আপনাকে push.default
কেবল git push
চুপ করে থাকার জন্য সেট করতে রাজি করার প্রচেষ্টার সাথে প্রচুর শব্দ করবে w
আপনি গিটের কোন সংস্করণটি চালাচ্ছেন বা আপনি কনফিগার করেছেন কিনা তা আপনি উল্লেখ করেন না push.default
, সুতরাং আমাদের অবশ্যই অনুমান করতে হবে। আমার ধারণা আপনি গিট সংস্করণ 2-পয়েন্ট-কিছু ব্যবহার করছেন এবং এটি বন্ধ হয়ে push.default
যাওয়ার simple
জন্য আপনি সেট করে রেখেছেন। অবিকল গীত কোন সংস্করণটি আপনি আছে, এবং কিছু আপনি কি যদি push.default
সেট করা থাকে, না যে দীর্ঘ ও বিরক্তিকর ইতিহাস কারণে ব্যাপার, কিন্তু শেষ পর্যন্ত, আসলে আপনি পেয়ে থাকেন যা এখনও গীত থেকে অন্য আর একটি অভিযোগ ইঙ্গিত করে যে আপনার Git হয় অতীত থেকে একটি ভুল এড়ানোর জন্য কনফিগার করা হয়েছে।
একটি প্রবাহ কি?
একটি প্রবাহটি কেবলমাত্র একটি অন্য শাখার নাম, সাধারণত একটি (নিয়মিত, স্থানীয়) শাখার সাথে সম্পর্কিত একটি দূরবর্তী ট্র্যাকিং শাখা।
প্রতিটি শাখায় একটি (1) প্রবাহ সেট থাকার বিকল্প রয়েছে। অর্থাত, প্রতিটি শাখার হয় একটি উজান থাকে, বা একটি প্রবাহ থাকে না। কোনও শাখায় একাধিক উজান থাকতে পারে না।
প্রবাহটি একটি বৈধ শাখা হওয়া উচিত , তবে তা হওয়া উচিত নয় (দূরবর্তী ট্র্যাকিংয়ের মতো হোক বা স্থানীয় পছন্দ হোক )। এটি হ'ল, যদি বর্তমান শাখা বি এর উজান প্রান্ত U থাকে , কাজ করা উচিত । যদি এটি কাজ না করে - যদি এটি অভিযোগ করে যে ইউটির অস্তিত্ব নেই — তবে বেশিরভাগ গিট কাজ করে যেমন প্রবাহটি একেবারেই সেট করা থাকে না। কয়েকটি কমান্ড, যেমন , প্রবাহের সেটিংটি দেখায় তবে এটিকে "চলে গেছে" হিসাবে চিহ্নিত করবে।origin/B
master
git rev-parse U
git branch -vv
একটি প্রবাহিত ভাল কি?
যদি আপনার push.default
সেট করা থাকে simple
বা upstream
, প্রবাহের সেটিংটি git push
কোনও অতিরিক্ত যুক্তি ছাড়াই ব্যবহৃত হবে , কেবল কাজ করবে।
এটাই — এটাই কেবল এটিই করে git push
। তবে এটি মোটামুটি তাৎপর্যপূর্ণ, যেহেতু git push
একটি সাধারণ টাইপোর ফলে মাথাব্যথার কারণ হয়।
আপনার push.default
যদি সেট করা থাকে nothing
, matching
বা current
, একটি স্ট্রিম সেট করা মোটেও কিছুই করে না git push
।
(এই সবগুলি ধরেই আপনার গিট সংস্করণ কমপক্ষে 2.0 হয় 2.0
উজান প্রভাবিত করে git fetch
আপনি যদি git fetch
কোনও অতিরিক্ত যুক্তি না দিয়ে চালনা করেন তবে বর্তমান শাখার উজানের সাথে পরামর্শ করে গিটটি কোন দূরবর্তী থেকে এনেছে তা নির্ধারণ করে। যদি উজানটি একটি দূরবর্তী ট্র্যাকিং শাখা হয়, গিটটি সেই দূরবর্তী থেকে নিয়ে আসে। (যদি উজানটি সেট না করা হয় বা স্থানীয় একটি শাখা হয়, গিট আনার চেষ্টা করে origin
))
প্রবাহটি প্রভাবিত করে git merge
এবং git rebase
খুব বেশি
আপনি যদি চালনা করেন git merge
বা git rebase
কোনও অতিরিক্ত যুক্তি ছাড়াই, গিট বর্তমান শাখার উজান ব্যবহার করে। সুতরাং এটি এই দুটি কমান্ডের ব্যবহারকে ছোট করে।
উজান প্রভাবিত করে git pull
আপনার কখনই 2 ব্যবহার করা উচিত নয় git pull
, তবে আপনি যদি করেন তবে git pull
কোন রিমোটটি আনতে হবে তা নির্ধারণ করতে এবং তার পরে কোন শাখাটি একত্রীকরণ বা পুনরায় চালু করতে হবে সেজন্য প্রবাহের সেটিংটি ব্যবহার করে। অর্থাৎ git pull
একই জিনিস করে git fetch
-because এটা আসলে চালায় git fetch
-আর তারপর একই জিনিস করে git merge
বা git rebase
, কারণ এটি আসলে চালায় git merge
অথবা git rebase
।
(আপনার সাধারণত এই দুটি পদক্ষেপ ম্যানুয়ালি করা উচিত, যতক্ষণ না আপনি গিটকে যথেষ্ট ভাল জানেন যে কোনও একটি পদক্ষেপ ব্যর্থ হলে, যা তারা শেষ পর্যন্ত হয়ে যাবে, আপনি কী ভুল হয়েছে তা চিনতে পারবেন এবং এটি সম্পর্কে কী করবেন তা জানবেন))
উজান প্রভাবিত করে git status
এটি আসলে সবচেয়ে গুরুত্বপূর্ণ হতে পারে। আপনার একবার একটি প্রবাহ সেট হয়ে গেলে,git status
ক্ষেত্রে আপনার বর্তমান শাখা এবং এর প্রবাহের মধ্যে পার্থক্যটি রিপোর্ট করতে পারেন।
যদি, সাধারণ হিসাবে, আপনি B
তার শাখাটিতে এর প্রবাহ সেট করে রেখেছেন এবং আপনি দৌড়াদৌড়ি করেন , আপনি অবিলম্বে দেখতে পাবেন যে আপনি যে ধাক্কা খেতে পারেন, এবং / অথবা কমিট করে আপনি মার্জ করতে বা পুনর্বাসনা করতে পারবেন কি না।origin/B
git status
এটি কারণ git status
রান:
git rev-list --count @{u}..HEAD
: আপনার যে কতগুলি কমিট B
চলছে তা চালু নেই ?origin/B
git rev-list --count HEAD..@{u}
: আপনার যে কতগুলি কমিট চলছে তা চালু নেই ?origin/B
B
একটি স্ট্রিম সেট করা আপনাকে এই সমস্ত জিনিস দেয়।
কিভাবে master
ইতিমধ্যে একটি আপ স্ট্রিম সেট আছে?
আপনি যখন কোনও দূরবর্তী থেকে প্রথম ক্লোন করেন, তখন:
$ git clone git://some.host/path/to/repo.git
বা অনুরূপ, গিটের শেষ পদক্ষেপটি মূলত git checkout master
,। এটি আপনার স্থানীয় শাখাটি পরীক্ষা করে master
— কেবলমাত্র আপনার কাছে কোনও স্থানীয় শাখা নেই master
।
অন্যদিকে, আপনার কাছে একটি রিমোট ট্র্যাকিং শাখা রয়েছে origin/master
, কারণ আপনি কেবল এটি ক্লোন করেছেন।
গিট অনুমান করে বলেছে যে আপনার অবশ্যই বোঝাতে হবে: "আমাকে একটি নতুন স্থানীয় করুন master
যা দূরবর্তী ট্র্যাকিংয়ের মতো একই প্রতিশ্রুতিতে নির্দেশ করে origin/master
এবং আপনি যখন এখান থেকে master
যান তখন আপস্রোমে সেট আপ করুন origin/master
" "
আপনার প্রতিটি শাখার ক্ষেত্রে এটি ঘটে git checkout
যা আপনার কাছে ইতিমধ্যে নেই। Git শাখা তৈরি করে এবং এটি "ট্র্যাক" (একটি আপস্ট্রিম যেমন আছে) সংশ্লিষ্ট দূরবর্তী-ট্র্যাকিং শাখা তোলে।
তবে এটি নতুন শাখাগুলির জন্য কাজ করে না , যেমন কোনও রিমোট-ট্র্যাকিং শাখা নেই branches ।
আপনি যদি একটি নতুন শাখা তৈরি করেন :
$ git checkout -b solaris
এখনও আছে, না origin/solaris
। আপনার স্থানীয় দূরবর্তী ট্র্যাকিং শাখা ট্র্যাক solaris
করতে পারে নাorigin/solaris
কারণ এটি বিদ্যমান নেই।
আপনি যখন প্রথম নতুন শাখাটি চাপবেন:
$ git push origin solaris
এটি তৈরি solaris
করে origin
এবং তাই origin/solaris
আপনার নিজস্ব গিট সংগ্রহস্থলেও তৈরি করে । কিন্তু এটা খুব দেরি হয়ে গেছে: আপনি ইতোমধ্যে একটি স্থানীয় আছে solaris
যে কোন মূল প্রজেক্টের হয়েছে । 3
গিটকে কেবল এখনই স্বয়ংক্রিয়ভাবে প্রবাহ হিসাবে সেট করা উচিত নয়?
সম্ভবত। "দুর্বলভাবে প্রয়োগ করা হয়েছে" এবং পাদটীকা দেখুন 1. এটি এখন পরিবর্তন করা শক্ত : এখানে মিলিয়ন 4 জন রয়েছে স্ক্রিপ্ট গীত ব্যবহার এবং কিছু ভাল তার বর্তমান আচরণের উপর নির্ভর করে হতে পারে। আচরণটি পরিবর্তনের জন্য একটি নতুন বড় রিলিজ দরকার, আপনাকে কিছু কনফিগারেশন ক্ষেত্র সেট করতে বাধ্য করা এবং আরও অনেক কিছু n সংক্ষেপে, গিট তার নিজের সাফল্যের শিকার: এতে আজ যা কিছু ভুল রয়েছে তা কেবলমাত্র তখনই স্থির করা যেতে পারে যদি পরিবর্তনটি বেশিরভাগ অদৃশ্য, পরিষ্কার-বেশি-ভাল হয় বা সময়ের সাথে ধীরে ধীরে হয়।
আসল বিষয়টি হ'ল এটি আজ নয়, আপনি যদি ব্যবহার না করেন --set-upstream
বা ব্যবহারের -u
সময় না করেন git push
। বার্তাটি আপনাকে এটাই বলছে।
আপনাকে এটির মতো করতে হবে না। ঠিক আছে, আমরা উপরে উল্লিখিত হিসাবে, আপনি এটি মোটেও করতে হবে না, তবে যাক আপনি একটি প্রবাহ চান । আপনি ইতিমধ্যে শাখা তৈরি করেছেন solaris
উপর origin
আগের ধাক্কা মাধ্যমে, এবং আপনার যেমন git branch
আউটপুট শো, আপনি ইতিমধ্যে আছে origin/solaris
আপনার স্থানীয় সংগ্রহস্থলের মধ্যে।
আপনি কেবল এটির জন্য প্রবাহ হিসাবে সেট করেন নি solaris
।
এটি এখন সেট করতে, প্রথম ধাক্কা দেওয়ার সময় ব্যবহার না করে git branch --set-upstream-to
। --set-upstream-to
সাব-কমান্ড যেমন যেকোনো বিদ্যমান শাখার নাম নেয় origin/solaris
, এবং যে অন্যান্য শাখা বর্তমান শাখা এর মূল প্রজেক্টের সেট করে।
এটাই — এগুলিই ঘটে — তবে এটির উপরে উল্লিখিত সমস্ত প্রভাব রয়েছে। এর অর্থ আপনি কেবল দৌড়াতে পারবেন git fetch
, তারপরে চারপাশ দেখতে পারবেন , তারপরে দৌড়াতে git merge
বা git rebase
যথাযথ হিসাবে, তারপরে নতুন কমিট করে চালাবেন git push
, গুচ্ছ গুচ্ছ অতিরিক্ত কিছু না করে।
1 ন্যায়সঙ্গতভাবে, এটি প্রাথমিক বাস্তবায়নটি ত্রুটি-প্রবণ ছিল তা তখন পরিষ্কার ছিল না। এটি তখনই স্পষ্ট হয়ে উঠল যখন প্রতিটি নতুন ব্যবহারকারী প্রতিবার একই ভুল করে। এটি এখন "কম দরিদ্র", যা "দুর্দান্ত" বলার অপেক্ষা রাখে না।
2 "কখনই" কিছুটা শক্তিশালী না, তবে আমি দেখতে পেলাম যে আমি যখন পদক্ষেপগুলি আলাদা করি, বিশেষত যখন আমি git fetch
আসলে তাদের কী প্রদর্শন করতে পারি এবং তখন তারা কী করবে git merge
বা কী git rebase
করবে তা তারা দেখতে পাবে গিট নবাবিরা বিষয়টি আরও অনেক ভাল বোঝে ।
3 আপনি যদি প্রথমটিকে —ie git push
হিসাবে চালান git push -u origin solaris
, আপনি -u
পতাকা যুক্ত করলে — গিটটি origin/solaris
আপনার বর্তমান শাখার জন্য প্রবাহ হিসাবে সেট হবে যদি (এবং কেবলমাত্র) ধাক্কা সফল হয়। সুতরাং আপনি প্রথম ধাক্কা সরবরাহ -u
করা উচিত । প্রকৃতপক্ষে, আপনি এটি পরবর্তী কোনও ধাক্কায় সরবরাহ করতে পারেন এবং এটি সেই প্রান্তে প্রবাহটি সেট বা পরিবর্তন করবে। তবে আমি মনে করি সহজ, যদি আপনি ভুলে যান।git branch --set-upstream-to
4 যাইহোক, কেবল "এক মিলিল-ইউএন" বলার অস্টিন শক্তি / ডাঃ এভিল পদ্ধতি দ্বারা পরিমাপ করা।