গিট পুশ.ডেফল্ট = কারেন্ট এবং পুশ ডিফল্ট = আপস্ট্রিমের মধ্যে পার্থক্য কী?


89

গিট-কনফিগারেশনের ম্যান পেজটি পুশ.ডিফাল্টের জন্য এই বিকল্পগুলি তালিকাভুক্ত করে:

nothing - do not push anything.
matching - push all matching branches. All branches having the same name in both ends are considered to be matching. This is the default.
upstream - push the current branch to its upstream branch.
tracking - deprecated synonym for upstream.
current - push the current branch to a branch of the same name.

বেশিরভাগ ক্ষেত্রে আমি ধরে নেব যে কোনও শাখার উজানের শাখায় চাপ দেওয়া একই নামের একটি শাখার দিকে ধাক্কা দেওয়ার সমান হবে, যেহেতু উজানের শাখায় সাধারণত একই নাম থাকবে, এবং যেহেতু একই নামের শাখা থাকবে ("বর্তমান") ) সাধারণত (বা সর্বদা, সংজ্ঞা অনুসারে?) উত্সাহীন হবে। তাহলে পার্থক্য কী?

আপডেট : গিট-কনফিগারেশনের জন্য ম্যান পৃষ্ঠাটি আপডেট করা হয়েছে (যেমনটি আশা করা যায়), সুতরাং সেখানে তৈরি করা পার্থক্যগুলিএখন আরও পরিষ্কার হতে পারে।


4
বিকাশকারীদের পক্ষে এটির মধ্যে পার্থক্য করা সত্যই বিরক্তিকর, সুতরাং 'সরল' প্রবর্তিত, এবং গিট-পুশের জন্য এটি ডিফল্ট বাহাভিয়ার হবে। প্রকৃতপক্ষে এটি 1.7.11 গিট-এ
xhlwill

14
সাম্প্রতিক গিট সতর্কতা push.default is unset; its implicit value is changing in Git 2.0এবং matchingবনাম সম্পর্কে simpleআরও তথ্যের জন্য দেখুন stackoverflow.com/questions/13148066/…
নট

আইকনোক্লাস্ট: আমি মনে করি না যে আমার সম্পাদনাটি প্রশ্নটির অখণ্ডতাটি একেবারেই বদলেছে, এবং সেকেলে তথ্য কেবল ঠিক করা দরকার। ব্যবহারকারীকে লিঙ্কটি ক্লিক করার অতিরিক্ত কাজ করতে কেন?
ফ্লিম

উত্তর:


72

আপনি আপনার প্রশ্নের পার্থক্যের সংক্ষিপ্তসার করেছেন। কনফিগার করা আপ স্ট্রিম শাখায় upstreamধাক্কা দেয় , যখন ধরে নেওয়া হয় যে আপস্ট্রিম শাখার বর্তমান স্থানীয় শাখার একই নাম রয়েছে এবং সেই নির্দিষ্ট নামেই ধাক্কা দেয়। বাস্তবে, কোনও স্থানীয় শাখার উজানের ট্র্যাকিং শাখার স্থানীয় শাখার মতোই নামটি ধরে নেওয়ার কোনও কারণ নেই।current

উদাহরণস্বরূপ, আপনি যদি একাধিক ভাণ্ডারগুলিতে বা অনেকগুলি ভাগ করা বিকাশকারী রিমোটগুলি জুড়ে কাজ করেন তবে আপনি প্রায়শই একই শাখার বিভিন্ন কাঁটাচামড়া ট্র্যাক করে শেষ করেন, যেমন allen-masterবা susan-masterউভয়ই masterযথাক্রমে অ্যালেন এবং সুসান রেপোতে শাখা ট্র্যাক করে । এই ক্ষেত্রে, currentভুল সেটিংস হবে, কারণ branch শাখার নামগুলি তাদের প্রত্যন্ত অঞ্চলে নেই। upstreamতবে, ঠিক কাজ করবে।

আরও ব্যবহারিক উদাহরণ হতে পারে একটি developmentএবং productionসংগ্রহস্থল উভয়ই ট্র্যাক করে। আপনার ওয়ার্কফ্লো প্রতিটি জন্য আলাদা মেইনলাইন শাখা ব্যবহার করতে পারে তবে এটি বিভ্রান্তি পেতে পারে। মনে করুন আপনি একটি কোড ইন্টিগ্রেটার ছিলেন এবং উভয় ভান্ডারগুলির masterশাখা আলাদাভাবে ট্র্যাক করতে চেয়েছিলেন ।

git checkout -b production --track production/master
git checkout -b development --track development/master

এখন আপনি দুটি শাখা পেয়েছেন যা তাদের নিজ নিজ সংগ্রহস্থলগুলি ট্র্যাক করে, যার মধ্যে দুটিও masterনামকরণ কনভেনশনকে মোটেই ব্যবহার করে না। শাখার নামগুলি সম্পর্কে সামান্য বিভ্রান্তি রয়েছে: তারা কী ট্র্যাক করে সেগুলি স্পষ্টভাবে বর্ণনা করে। তা সত্ত্বেও, push.default = currentদূরবর্তীতে একটি developmentবা productionশাখা নেই বলে কোনও ধারণা তৈরি করা যাবে না ।


6
কখন upstreamঅগ্রাধিকার দেওয়া হবে তার জন্য আপনি দুটি উদাহরণ দিচ্ছেন current। আমি মনে করি এটি বেশ সুস্পষ্ট, সুতরাং আপনার বিপরীত ক্ষেত্রে উদাহরণ দেওয়া উচিত।
AndreKR

4
@ আন্ডারেকেআর আফাইক currentআপনার ক্ষেত্রে নতুন-বিকাশকারী বিকাশকারী ক্ষেত্রে আরও ভাল কারণ আপনার git configকোথাও ক্লোন করা থাকলে আপনার খুব বেশি প্রয়োজন নেই । আপনার জন্যcurrent রিমোট রেপোতে সমকামী শাখাগুলিতে পুশ করে বা তৈরি করে-তখন-পুশ করে-তৈরি করে, যদি একই নামযুক্ত শাখা ইতিমধ্যে বিদ্যমান না থাকে তবে এগুলি পুরোপুরি করতে অস্বীকার করবে। এক্ষেত্রে একই প্রবণতা রয়েছে যদি না একটি প্রবাহ শাখা সুস্পষ্টভাবে সেট করা না হয় বা অন্যথায় ইয়াবারের উত্তরে উল্লিখিত হিসাবে সেট করা থাকে না । simpleupstream
কমই 'হেন ইজ মনিকা' অজস্র

6

current রিমোট রেপোতে একই নামের একটি শাখায় বর্তমান শাখাটি ঠেলে দেবে।

upstream বর্তমান শাখাটিকে উজানের শাখায় ঠেলে দেবে।

আপস্ট्रीम শাখা এমন একটি শাখা যা আপনার বর্তমান শাখা থেকে প্রবাহিত হিসাবে সুস্পষ্ট বা স্পষ্টভাবে সংজ্ঞায়িত করা হয়েছে। তার মানে ডিফল্টভাবে ধাক্কা এবং টান এই শাখার সাথে সিঙ্ক করবে। উজানের শাখাটি বর্তমান শাখার মতো একই রেপোতে থাকতে পারে। আপনি আপনার স্থানীয় বৈশিষ্ট্য (বিষয়) শাখা থেকে আপস্ট্রিম হিসাবে আপনার স্থানীয় মাস্টার শাখা সেট আপ করার মতো আকর্ষণীয় কাজ করতে পারেন এবং তাদের মধ্যে চাপ দিন এবং টানুন।

অন্তর্নিহিত আপস্ট্রিম সেটআপটি branch.autosetupmergeকনফিগার মানের মাধ্যমে করা হয়। git configসহায়তা পৃষ্ঠায় আপনি ডকুমেন্টেশন সন্ধান করতে পারেন। কমান্ডের -uঅপশনটি দিয়ে স্পষ্টত আপস্ট্রিম সেটআপ করা হয় git branch। বিশদ জন্য সহায়তা পৃষ্ঠা দেখুন।


আমি মনে করি branch.autoSetupMergeনা -u/ হিসাবে একই চিন্তা করে --set-upstream। কমপক্ষে, আমি ডকুমেন্টেশনে কিছুই দেখছি না যা বোঝায় যে এটি গিট পুশকে এমনভাবে আচরণ -uকরে যা এটি ডিফল্টরূপে ডাকা হয়েছিল , যা এটি আমার কাছে মনে হচ্ছে যা আপনি বলছেন। আপনি কী বলতে চেয়েছিলেন তা কি স্পষ্ট করে বলতে পারেন?
ওয়াল্ডরিয়াস

@ ওয়াল্ডরিয়াস নিশ্চিত; আপনি যখন রিমোট ট্র্যাকিং শাখা পরীক্ষা করে দেখছেন, তখন branch.autoSetupMergeডিফল্টরূপে কনফিগারটি একটি নতুন স্থানীয় শাখা তৈরি করে এবং এর প্রবাহকে দূরবর্তী ট্র্যাকিং শাখা হিসাবে সেট করে। এই অন্তর্নিহিত ক্রিয়াটি -t( --track) বা -u ...( --set-upstream-to=...) পতাকাগুলি ব্যবহার করে স্পষ্টভাবে করা যেতে পারে , যা কিছুটা আলাদা সিনট্যাক্সের সাহায্যে একই কাজ করে।
ইয়াওয়ার

4
আমি দেখতে এখানে যা ঘটেছে - যেহেতু এই প্রশ্ন সম্পর্কে git push, আমি (ভুল করে) অধিকৃত আপনার সম্পর্কে কথা বলছিল -uবিকল্প git pushবদলে -uবিকল্প git branch। বিভ্রান্তির জন্য দুঃখিত :)
ওয়াল্ডরিয়াস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.