আমার সমস্ত ভান্ডারগুলির জন্য ডিফল্টরূপে গিট পুলের পুনরায় ব্যবহার কীভাবে করবেন?


186

হোস্ট গিট সংগ্রহস্থল সেটআপ করার কোনও উপায় কি git pullএর (স্থানীয়) ক্লোন থেকে কোনও কাজ --rebaseডিফল্টরূপে করা যায়? স্ট্যাক ওভারফ্লোতে অনুসন্ধান করে আমি শিখেছি branch.autosetuprebase, তবে এটি পৃথকভাবে ক্লোন প্রতি কনফিগার করা দরকার।

আমার Project প্রবাহ যেমন যে আমরা সেট আপ করা হয়েছে সামনে শাখা এটি একটি বৈশিষ্ট্য শাখা ing। এটি প্রায় সর্বদা ব্যবহার করে , তাই আমি এটি ডিফল্ট হতে পারি কিনা তা জানার চেষ্টা করছি।pulldevelopmergepull--rebase


6
কেন আপনি এটি চান? আমি মনে করি যে ব্যবহারকারীদের কেসটি আরও উপযুক্ত হবে (
স্রোত

4
@ জোনাস উইলিকি হ্যাঁ, আমি সম্মত। এটা ঠিক যে আমার দলের সদস্যদের মধ্যে কিছু গিটে নতুন এবং আমি জানতে চাই যে প্রাথমিক পর্যায়ে সমস্যাগুলি এড়াতে এটিকে কার্যকর করার কোনও উপায় আছে কিনা (তারা না জেনে অবধি)। টিমটি ভিন্ন টাইমজোন থেকেও দূরবর্তীভাবে কাজ করে, যার অর্থ যদি কিছু ভুল হয়ে যায় তবে তারা বেশ কয়েক ঘন্টা ধরে আটকে থাকবে। এটি সম্ভব কিনা তা জানার জন্য কেবল কৌতূহলী।
মাস্কযুক্ত ম্যান

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

3
@ জোনাসওয়িলিকি দলের সদস্যরা তাদের যে নতুন বৈশিষ্ট্যটিতে কাজ করছেন তার জন্য একটি নতুন শাখা তৈরি করে (এবং এটি তারা ইতিমধ্যে বেশ ভালভাবে বুঝতে পেরেছেন)। পুনর্বাসনের প্রয়োজনীয়তা এলো কারণ অন্যান্য বিকাশকারীরা "রিমোট" বিকাশকারী শাখায় প্রতিশ্রুতিবদ্ধ হয়েছিলেন যে সময়ের মধ্যে তিনি তার পরিবর্তনগুলি এগিয়ে নিতে প্রস্তুত হন। অতএব, আমি চাই যে তিনি তার পরিবর্তনগুলি ঠেকানোর আগে দূরবর্তী থেকে একটি টান পুনরায় কাজ করুন। প্রকল্পটি নিজেই যথেষ্ট পরিপক্ক, কেবল দলটিই নতুন। :) সুতরাং এটি কেবলমাত্র মানুষের ক্ষেত্রে "প্রাথমিক সেটআপ"। এই পরিস্থিতিতে আপনার পরামর্শ কি হবে?
মাস্কেড ম্যান

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

উত্তর:


205

ডিফল্ট টানুন আচরণের জন্য এখন কনফিগারেশনের 3 টি আলাদা স্তর রয়েছে। সাধারণ থেকে সর্বাধিক সূক্ষ্ম দানাদার এগুলি:

1। pull.rebase

এটি সেট করার trueঅর্থ এটি git pullসর্বদা সমান git pull --rebase(যতক্ষণ না branch.<branchname>.rebaseস্পষ্টভাবে সেট করা থাকে false)। এটি সংগ্রহস্থল বা বিশ্বজুড়ে প্রতি সেট করা যেতে পারে।

2। branch.autosetuprebase

এটি সেট করার alwaysঅর্থ হ'ল যখনই একটি ট্র্যাকিং শাখা তৈরি করা হবে, নীচের মত একটি কনফিগারেশন এন্ট্রি এর জন্য তৈরি করা হবে। পুঙ্খানুপুঙ্খ নিয়ন্ত্রণের জন্য, এই সেট করা যেতে পারে never, localবা remoteএবং সংগ্রহস্থল প্রতি বা বিশ্বব্যাপী নির্ধারণ করা যাবে। git config --helpআরও বিশদ জন্য দেখুন ।

3। branch.<branchname>.rebase

এটিকে সেট করার trueঅর্থ হল যে নির্দিষ্ট শাখাটি সর্বদা তার প্রবাহ থেকে রিবেসিংয়ের মাধ্যমে টানবে, যদি না git pull --no-rebaseস্পষ্টভাবে ব্যবহৃত হয়।

উপসংহার

সুতরাং আপনি কোনও ভাণ্ডারের সমস্ত ভবিষ্যত ক্লোনগুলির জন্য ডিফল্ট আচরণ পরিবর্তন করতে পারবেন না, আপনি বর্তমান ব্যবহারকারীর (বিদ্যমান এবং ভবিষ্যত) সমস্ত রিপোজিটরির মাধ্যমে ডিফল্ট পরিবর্তন করতে পারেন git config --global pull.rebase true


4
আপনার প্রতিক্রিয়ার জন্য ধন্যবাদ. আমি যদি আমার কাছে একটি সেটিংস থাকতে পারে তা অন্বেষণ করছিলাম যাতে रिपোটারিটি ক্লোন করে যে কেউ এটি ডিফল্টরূপে সক্ষম করেছে। উপরোক্ত সেটিংটি সংরক্ষণ করা হবে ~/.gitconfig, যার অর্থ প্রতিটি বিকাশকারী যিনি হোস্ট সংগ্রহস্থলের ক্লোন করে তাদের কমান্ডটি চালানো দরকার। আপনার সমাধান সম্পর্কে অভিযোগ না। এটি একটি ভাল, আমি কেবল আপনার পয়েন্টটি সঠিকভাবে বুঝতে পেরেছি তা নিশ্চিত করতে চাই।
মাস্কেড ম্যান

উত্তর করার জন্য ধন্যবাদ. এটি দেখতে যেমন এটি দেখতে পারে তত কাছাকাছি।
মাস্কেড ম্যান

138

কেমন

git config --global pull.rebase true

এটি গিটকে সর্বদা রিবেস সহ টানতে বলবে।


3
ধন্যবাদ, এটি বিদ্যমান ট্র্যাকিং শাখার জন্য দুর্দান্ত কাজ করে।
ফ্লস'জেন

1
দয়া করে অপসারণ করুন --bool, এটি অপ্রয়োজনীয়
ডায়রালিক

38

উত্তর না হয়।

রিমোট রিপোজিটরি সেট করার কোনও উপায় নেই যাতে এটির ক্লোন করা প্রত্যেকেরই ডিফল্ট আচরণ git pullপরিবর্তিত হয়।

তবে, আপনি একটি সার্ভার-সাইড হুক সেট আপ করতে পারেন যা মার্জ কমিটের উপর চাপ দেয় না তা পরীক্ষা করে ( এই জাতীয় কিছু সম্ভবত)।

এছাড়াও কিছু কনফিগারেশন বিকল্প রয়েছে যা আপনার আগ্রহী হতে পারে the দূরবর্তী সংগ্রহস্থল থেকে ক্লোন করা সমস্ত বিকাশকারীকে এটিকে ম্যানুয়ালি সেট করতে হবে।

1. বিকল্প branch.<name>.rebase

আপনি সর্বদা ব্যবহার করতে একটি স্থানীয় শাখা কনফিগার করতে পারেন --rebase, এর মতো, <name>একটি শাখার নাম দিয়ে প্রতিস্থাপন :

git config branch.<name>.rebase true

এই চলমান পর master, masterঅধ্যায় .git/configদেখতে এমন ছিল:

[branch "master"]
    remote = origin
    merge = refs/heads/master
    rebase = true

2. বিকল্প branch.autosetuprebase

প্রতিটি গিট শাখার জন্য পূর্ববর্তী কনফিগার কমান্ড চালানো ঝামেলা হতে পারে, তাই আপনি প্রতিটি নতুন শাখার জন্য স্বয়ংক্রিয়ভাবে সেট আপ করতে গিটটি কনফিগার করতে পারেন:

git config branch.autosetuprebase always

(আপনি নির্দিষ্ট করতে পারেন never, remoteএবং localদেখুন man git-configবিস্তারিত জানার জন্য।)

--globalবিকল্প ব্যতীত কনফিগারেশনটি সংরক্ষণ করা হয় .git/configএবং কেবলমাত্র বর্তমান সংগ্রহস্থলই প্রভাবিত হয়। এর --globalসাহায্যে কনফিগারেশনটি সংরক্ষণ করা হয় ~/.gitconfigএবং প্রতিটি অ-কনফিগার্ড সংগ্রহস্থল ক্ষতিগ্রস্থ হয়।

এই বিকল্পটি ইতিমধ্যে বিদ্যমান শাখাগুলিকে প্রভাবিত করে না।

3. বিকল্প pull.rebase

git config --bool pull.rebase true

(আপনি এটি --globalবিকল্পও দিতে পারেন ।)

যদি এই বিকল্পটি সত্য git pullহয় git pull --rebaseতবে চালানো সমান , যদি না branch.<name>.rebaseসেট করা থাকে false


3

প্রদত্ত শাখায় একটি --rebaseইস্যু করার সময় এটি বিকল্পটিকে ডিফল্ট করে তোলে git pull

@ ফ্লিম, trueআপনার প্রথম বিকল্পটি কাজ করতে আমার যুক্ত হওয়া দরকার ।

সুতরাং সঠিক বাক্য গঠনটি হ'ল:

git config branch.<branch>.rebase true

এই আদেশটি developশাখায় চালাতে :

git config branch.develop.rebase true

এবং এখন developবিভাগটি এর .git/configমতো দেখাচ্ছে:

[branch "develop"]
        remote = origin
        merge = refs/heads/develop
        rebase = true

ধন্যবাদ, আমি আমার উত্তরটি সম্পাদনা করেছি, ভবিষ্যতে উত্তরটি নিজে সম্পাদনা করতে নির্দ্বিধায় মনে হয়।
ফ্লিম

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

1

বর্তমানে কোনও সংগ্রহস্থলের জন্য ডিফল্ট নীতি সেট করার কোনও উপায় নেই।

যদি আপনি এটি নিজের জন্য চান এবং আপনি কমপক্ষে গিট ১.7.৯ ব্যবহার করেন তবে আপনি বিশ্বব্যাপী pull.rebaseকনফিগারেশনটিকে নিম্নলিখিত হিসাবে সেট করতে পারেন :

git config --global pull.rebase true

তবে আপনাকে প্রতিটি মেশিনে করতে হবে। একটি বিকল্প হ'ল সেই বিকল্পটি দিয়ে ডিফল্ট ব্যবহারকারী হোম টেম্পলেট / কঙ্কালটি কনফিগার করতে পারে। ব্যবহারকারীরা তবে এই বিকল্পটি পরিবর্তন করতে পারেন।

আপনি যদি মার্জগুলি না চান, আপনি মার্জগুলিতে পুশগুলি প্রত্যাখ্যান করতে একটি সার্ভার-সাইড হুক সংজ্ঞায়িত করতে পারেন।

আপনার রেফারেন্সের জন্য, সে হ'ল পুল.রেবাসের উত্স নথি :

সত্য হয়ে গেলে, "গিট টান" চালানো হলে ডিফল্ট দূরবর্তী থেকে ডিফল্ট শাখাটি মার্জ করার পরিবর্তে আনীত শাখার শীর্ষে শাখাগুলি রিবেস করা হয়। প্রতি শাখা ভিত্তিতে এটি সেট করার জন্য "ব্রাঞ্চ..রেবাস" দেখুন।

মার্জ হওয়ার পরে, গিট রিবেসে --rebase- মার্জ বিকল্পটি পাস করুন যাতে স্থানীয় মার্জ কমিটগুলি রিবাজে অন্তর্ভুক্ত থাকে ( বিশদটির জন্য গিট-রিবেস দেখুন)।

সংরক্ষণ করার সময়, গিট রিবেস-এর সাথে প্রিফারিজ-মার্জগুলিও পাস করুন যাতে স্থানীয়ভাবে প্রতিশ্রুতিবদ্ধ মার্জ কমিটগুলি গিট টানায় চালিত করে তুলনামূলকভাবে কমতে না পারে।

মানটি ইন্টারেক্টিভ হয়, রিবেস ইন্টারেক্টিভ মোডে চালানো হয়।

দ্রষ্টব্য: এটি সম্ভবত বিপজ্জনক অপারেশন; প্রভাবগুলি না বুঝলে এটি ব্যবহার করবেন না ( বিশদটির জন্য গিট-রিবেস দেখুন)।

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