গিট - পুশ ডিফল্ট "ম্যাচিং" এবং "সরল" এর মধ্যে পার্থক্য কী


285

আমি আপাতত গিট ব্যবহার করছি, তবে আমাকে নিজেই নতুন রিমোট রেপো স্থাপন করতে হয়নি এবং আমি এটি করার বিষয়ে আগ্রহী ছিলাম। আমি টিউটোরিয়াল পড়ছি এবং কীভাবে "গিট পুশ" কাজ করতে পারি তা নিয়ে আমি বিভ্রান্ত।

আমি যদি কেবল git pushএটি ব্যবহার করি তবে আমাকে ডিফল্ট শাখা (?) দেখাতে বলবে? এই দুটি বিকল্পের সাথে এটি আমাকে কী সরবরাহ করে?

git config --global push.default matching
git config --global push.default simple

মেলানো আমার স্থানীয় রেপোতে আমার যা কিছু শাখা আছে কেবল তা ঠেলে দেয় এবং যদি সেগুলি আমি মেলে না তবে ম্যানুয়ালি এটিকে আমার নতুন স্থানীয় শাখাগুলিকে ধাক্কা দিয়ে বলতে হবে, সঠিক? এটি ব্যবহারের জন্য সেরা অনুশীলনটি কি সবচেয়ে সহজ?



1
এখন, যদি কেবলমাত্র pull.defaultসেগুলি সমস্ত স্থানীয়ভাবে স্থানীয়ভাবে আপডেট করার জন্য উপলব্ধ থাকে
নোগুরেন

উত্তর:


367

git push এই কনফিগারেশনের উপর নির্ভরশীল সমস্ত শাখা বা একককে ধাক্কা দিতে পারে:

সমস্ত শাখা ঠেলা

git config --global push.default matching

এটি সমস্ত শাখা প্রত্যন্ত শাখায় ঠেলে দেবে এবং তাদের একীভূত করবে। আপনি যদি সমস্ত শাখা টিপতে না চান তবে আপনি কেবল বর্তমান শাখাটি পুশ করতে পারেন।

কেবল বর্তমান শাখাটি পুশ করুন

git config --global push.default simple

সুতরাং, আমার মতে, এই বিকল্পটি ব্যবহার করা এবং আপনার কোড শাখাকে শাখায় ঠেলা ভাল। ম্যানুয়ালি এবং স্বতন্ত্রভাবে শাখাগুলি ঠেলা ভাল।


16
আমি push.default current@ ইউপিএন্ডএডামের উত্তরটি পছন্দ করেছি । এটি সম্পর্কে জানেন না।
অ্যালানজডস

4
মনে রাখবেন যে simpleএটি আর বিকল্প নয়। ইন 1.7.8.4(বা তার আগে?) এটি একটি ত্রুটির ফলাফল যখন আপনি ধাক্কা চেষ্টা করুন। তবে currentএখনও উপলভ্য
ষাট

@ ষাট4 বিট: আমি গিট সংস্করণটি 1.7.1 ব্যবহার করছি। আমি ব্যবহার করছি tracking-> বর্তমান শাখাটিকে তার উজানের শাখায় ঠেলাচ্ছি।
কেভিনার্পে

@ ষাট4 বিট না, এটি গিটের পরবর্তী সংস্করণে অন্তর্ভুক্ত হয়ে গেছে যা আমি জানি না যা (১.7) এমনকি নরকের মতো পুরানো যদিও ২০১ 2016 সালের জন্য। আমি এ জাতীয় পুরানো সংস্করণ ব্যবহার করার পরামর্শ দিই না।
শ্মৌদি

Downvoted। দুঃখিত, তবে লিঙ্কযুক্ত পৃষ্ঠার বিবরণটি simpleকোনও অর্থবোধ করে না, এই উত্তরটির বিরোধিতা করে, এবং ভুল - যা এই উত্তরটিকে বিভ্রান্তিকর করে তোলে। লিঙ্কযুক্ত পৃষ্ঠাটি বলেছে simple"একের পর এক শাখাগুলি ঠেলে দেবে। বেশিরভাগই বর্তমান শাখার সাথে যুক্ত" " এর অর্থ কি এটি সমান্তরাল বিপরীতে শাখাগুলিকে ক্রমান্বয়ে চাপ দেবে? "বেশিরভাগ সংযুক্ত" এর অর্থ কী? তারপরে, বর্ণনার জন্য বিবরণটি simpleউদ্ধৃতিতে চলে যায় matching, যার মধ্যে কেউ মনে করে যে এর বিবরণটিও matchingপ্রযোজ্য simple। তবে স্পষ্টতই এটি সত্য নয়।
tvanc

91

জিআইটি ডকুমেন্টেশন থেকে: গিট ডক্স

নীচে সম্পূর্ণ তথ্য দেয়। সংক্ষেপে, simpleকেবলমাত্র টিপুন current working branchএবং তারপরেও যদি এটির দূরবর্তীটিতে একই নাম থাকে name এটি শিক্ষানবিশদের জন্য খুব ভাল সেটিং এবং এটি ডিফল্ট হয়ে উঠবেGIT 2.0

যেখানে দূরবর্তী স্থানে একই নাম রয়েছে এমন সমস্ত শাখা স্থানীয়ভাবে matchingচাপ দেবে । (আপনার বর্তমান কার্যকারী শাখা বিবেচনা না করে)। এর অর্থ সম্ভবত আপনি বিভিন্ন ভাগ করতে চাইবেন না এমনগুলি সহ অনেকগুলি বিভিন্ন শাখা প্রশমিত করা হবে।

আমার ব্যক্তিগত ব্যবহারে, আমি সাধারণত একটি পৃথক বিকল্প ব্যবহার করি: currentযা বর্তমান কার্যকারী শাখাটিকে ঠেলা দেয়, (কারণ আমি সবসময় যে কোনও পরিবর্তনের জন্য শাখা করি)। তবে একটি শিক্ষানবিসের জন্য আমি পরামর্শ দেবsimple

push.default
কোনও রেফস্পেক স্পষ্টভাবে না দেওয়া থাকলে অ্যাকশন গিট পুশ নিতে হবে Def নির্দিষ্ট কর্মপ্রবাহের জন্য বিভিন্ন মান যথাযথভাবে উপযোগী; উদাহরণস্বরূপ, একটি সম্পূর্ণরূপে কেন্দ্রীয় কার্যপ্রবাহে (অর্থাত্ উত্স উত্সটি পুশ গন্তব্যের সমান), প্রবাহ সম্ভবত সম্ভবত আপনি চান। সম্ভাব্য মানগুলি হ'ল:

কিছুই না - কোনও রেস্পপেক স্পষ্টভাবে না দেওয়া থাকলে কিছুই (ত্রুটি আউট) ঠেকবেন না। এটি মূলত এমন লোকদের জন্য যাঁরা সর্বদা স্পষ্ট হয়ে ভুল এড়াতে চান।

কারেন্ট - প্রাপ্তির শেষে একই নামে একটি শাখা আপডেট করতে বর্তমান শাখায় চাপ দিন। কেন্দ্রীয় এবং অ-কেন্দ্রীয় উভয় প্রবাহে কাজ করে।

আপস্ট्रीम - বর্তমান শাখাকে আবার সেই শাখায় ঠেলে দাও যার পরিবর্তনগুলি সাধারণত বর্তমান শাখায় একীভূত হয় (যাকে @ {upstream called বলা হয়)। এই মোডটি তখনই বোধগম্য হয় যদি আপনি একই সংগ্রহস্থলের দিকে চাপ দিচ্ছেন আপনি সাধারণত (যেমন কেন্দ্রীয় কার্যপ্রবাহ) থেকে টানবেন।

সহজ - কেন্দ্রিয় কর্মস্থলে প্রবাহের শাখার নাম স্থানীয় নাম থেকে আলাদা হলে ধাক্কা দিতে অস্বীকার করতে অতিরিক্ত সুরক্ষার সাথে প্রবাহের মতো কাজ করুন।

কোনও রিমোটের দিকে ধাক্কা দেওয়ার সময় যা আপনি সাধারণত তুলনা করেন সেই দূরবর্তী থেকে আলাদা, বর্তমান হিসাবে কাজ করুন work এটি সবচেয়ে নিরাপদ বিকল্প এবং নতুনদের জন্য উপযুক্ত।

এই মোডটি গিট ২.০ এ ডিফল্ট হয়ে যাবে।

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

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

এটি বর্তমানে ডিফল্ট, তবে গিট ২.০ ডিফল্টটিকে সরল করে দেবে।


হ্যাঁ, তবে আমি এমনকি ধাক্কা.ডিফল্ট সেটিংসের সাথেও ধরে নিয়েছি যে আপনি যদি "$ গিট পুশ অরিজিন মাস্টার " করেন তবে এটি কেবল বর্তমান নামটিকে একই নাম দিয়ে উত্সের শাখায় উত্থিত করবে ... ঠিক? আপনার উল্লেখ করা উচিত যে একটি ডিফল্ট রিমোটও রয়েছে
আলেকজান্ডার মিলস

1
আমি নিশ্চিত নই যে আপনি কী পাচ্ছেন তা আমি বুঝতে পেরেছি। যে কোনও মোডে যদি আপনি বলেন git push origin masterতবে এটি একই কাজ করবে। মোডগুলি এবং ডিফল্টগুলির মূল বিষয়টি সাধারণত যখন হয় আপনি যখন সহজভাবে বলেন git pushএবং আপনি এটিকে কোনও দূরবর্তী বা কোনও শাখা না বলে থাকেন। কি ডিফল্ট সেটিংস? আপনি পুশ.ডেফল্টের ডিফল্ট সেটিংস বলতে চান? ডিফল্ট সেটিংটি গিটের কোন সংস্করণে ... যদি আপনি এটি না পান তবে আপনার মন্তব্য অত্যন্ত অস্পষ্ট।
আপঅ্যান্ডএডাম

'push.default কোনও রেফস্পেক স্পষ্টভাবে না দেওয়া থাকলে অ্যাকশন গিট পুশ হওয়া উচিত' সংজ্ঞায়িত করে যদি আপনি বলেন যে গিট পুশ অরিজিন মাস্টার আপনি আরও তথ্য দিচ্ছেন এবং এটি এখনও আপনার বর্ণিত জিনিসটি না করতে পারে; আপনার সেট করা রেফস্পেকের উপর নির্ভর করে .. git-scm.com/book/en/v2/Git-Internals-The-Refspec
অ্যাডাম

2

গিট ভি 2.0 রিলিজ নোটস

পিছনের সামঞ্জস্য নোট

যখন git push [$there]বলে না কি ধাক্কা, আমরা প্রথাগত "ম্যাচিং" শব্দার্থবিদ্যা এতদূর (আপনার সব শাখা দূরবর্তী যতদিন ইতিমধ্যেই ওইখানে একই নামের শাখা পাঠানো হয়) ব্যবহার করেছেন। গিট ২.০-তে, ডিফল্টটি এখন "সাধারণ" শব্দার্থক, যা ধাক্কা দেয়:

  • কেবল একই শাখায় বর্তমান শাখাটি কেবল একই নামযুক্ত শাখায় এবং কেবল যখন বর্তমান শাখাটি সেই প্রত্যন্ত শাখার সাথে সংহত করার জন্য সেট করা থাকে, আপনি যদি এখান থেকে আনার মতো একই দূরবর্তী দিকে চাপ দিচ্ছেন; অথবা

  • কেবল একই শাখায় এখনকার শাখাটি একই নামযুক্ত, যদি আপনি এমন কোনও রিমোটে চাপ দিচ্ছেন যা আপনি সাধারণত এখান থেকে আনেন না।

এটিকে পরিবর্তন করতে আপনি কনফিগারেশন ভেরিয়েবল "push.default" ব্যবহার করতে পারেন। আপনি যদি কোনও পুরনো টাইমার হন যিনি "ম্যাচিং" শব্দার্থক ব্যবহার চালিয়ে যেতে চান, উদাহরণস্বরূপ, আপনি ভেরিয়েবলটিকে "ম্যাচিং" তে সেট করতে পারেন। অন্যান্য সম্ভাবনার জন্য ডকুমেন্টেশন পড়ুন।

কমান্ড লাইনে কোন পাথ যুক্ত করা উচিত তা নির্দিষ্ট করে ছাড়াই যখন git add -uএবং git add -Aকোনও সাব-ডিরেক্টরিতে চালিত হয় তখন তারা পুরো গাছটিতে ধারাবাহিকতা git commit -aএবং অন্যান্য কমান্ডের জন্য পরিচালনা করে (এই নির্দেশগুলি কেবলমাত্র বর্তমান উপ-ডিরেক্টরিতে অপারেট করতে ব্যবহৃত হয়)। বলুন git add -u .বা git add -A .আপনি বর্তমান ডিরেক্টরিতে অপারেশন সীমাবদ্ধ করতে চান।

git add <path>git add -A <path>এখনকার মতোই তাই git add dir/আপনার ডিরেক্টরি থেকে সরানো পথগুলি লক্ষ্য করে এবং অপসারণটি রেকর্ড করবে। গিটের পুরানো সংস্করণগুলিতে, git add <path>অপসারণগুলি উপেক্ষা করতে ব্যবহৃত হয়। আপনি যদি সত্যিই চান তবে git add --ignore-removal <path>এটিতে কেবল যুক্ত বা পরিবর্তিত পাথগুলি যোগ করতে বলতে <path>পারেন।

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