मेरी सभी रिपॉजिटरी के लिए डिफ़ॉल्ट रूप से गिट पुल रिबेट का उपयोग कैसे करें?


186

क्या मेजबान गिट रिपॉजिटरी को सेटअप करने का एक तरीका है जैसे कि git pullइसके (स्थानीय) क्लोन से कोई भी --rebaseडिफ़ॉल्ट रूप से उपयोग होता है? स्टैक ओवरफ्लो पर खोज करके, मैंने इसके बारे में सीखा branch.autosetuprebase, लेकिन इसे व्यक्तिगत रूप से प्रति क्लोन को कॉन्फ़िगर करने की आवश्यकता है।

मेरे परियोजना प्रवाह इस तरह है कि हम की स्थापना की है इससे पहले कि शाखा इसे करने के लिए एक सुविधा शाखा ing। यह लगभग हमेशा उपयोग होता है , इसलिए मैं यह पता लगाने की कोशिश कर रहा हूं कि क्या यह डिफ़ॉल्ट हो सकता है।pulldevelopmergepull--rebase


6
आप ऐसा क्यों चाहते हैं? मुझे लगता है कि उपयोगकर्ताओं को सक्रिय रूप से सोचने के लिए सिखाना अधिक उचित होगा कि कौन सा मामला अधिक उपयुक्त होगा (उनके द्वारा किए गए परिवर्तनों या अपस्ट्रीम से उम्मीद के आधार पर) '
जोनास शफर

4
@JonasWielicki हां, मैं सहमत हूं। यह सिर्फ इतना है कि मेरी टीम के कुछ सदस्य गिट के लिए नए हैं, और मैं जानना चाहूंगा कि क्या प्रारंभिक चरण के दौरान समस्याओं से बचने के लिए इसे लागू करने का एक तरीका है (जब तक कि उन्होंने इसे सीखा नहीं है)। टीम एक अलग समयक्षेत्र में भी दूरस्थ रूप से काम करती है, जिसका अर्थ है कि अगर कुछ गलत होता है तो वे कई घंटों तक अटके रहेंगे। बस यह जानने के लिए उत्सुक हैं कि क्या यह संभव है।
नकाबपोश आदमी

1
मुझे लगता है कि विशेष रूप से प्रारंभिक सेटअपों के लिए, मर्ज के लिए जाना बेहतर है। यदि आपका कोड वास्तव में विचलन करता है, तो रिबेस बहुत अधिक अजीब चीजें बनाता है। आपको एक ही उलझनों को बार-बार सुलझाना होगा जब तक आप धक्का नहीं देते। इसलिए यदि टीम का कोई सदस्य किसी कोड पर काम करना चाहता है, तो हमेशा रिबास का उपयोग करता है और तब तक धक्का नहीं देता है जब तक कि वह ऐसा नहीं करता है (जो कि नवागंतुक खुद कर सकते हैं, ब्रांच करने के बजाय), उन्हें उसी संघर्ष का सामना करना पड़ेगा जो उन्होंने पहले ही एक्स बार हल कर लिया है। ।
जोनास शफर

3
@JonasWielicki टीम के सदस्यों को करना प्रत्येक नई सुविधा वे पर काम के लिए एक नई शाखा बनाने (और यह, वे पहले से ही काफी अच्छी तरह से समझ चुके हैं)। रिबास की आवश्यकता इसलिए आती है क्योंकि अन्य डेवलपर्स उस समय तक "दूरस्थ" विकसित शाखा के लिए प्रतिबद्ध होते हैं जब तक कि वह अपने परिवर्तनों को आगे बढ़ाने के लिए तैयार नहीं होता है। इसलिए, मैं चाहूंगा कि वह अपने बदलावों को आगे बढ़ाने से पहले रिमोट से एक पुल रिबेस करे। परियोजना स्वयं काफी परिपक्व है, केवल टीम नई है। :) तो यह केवल लोगों के संदर्भ में एक "प्रारंभिक सेटअप" है। इस परिदृश्य के लिए आपकी क्या सलाह होगी?
नकाबपोश मैन

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
धन्यवाद, यह मौजूदा ट्रैकिंग शाखाओं के लिए बढ़िया काम करता है।
Fls'Zen

1
कृपया हटा दें --bool, यह अनावश्यक है
diralik

38

जवाब न है।

एक दूरस्थ रिपॉजिटरी स्थापित करने का कोई तरीका नहीं है ताकि हर कोई जो इसे क्लोन करता है, वह git pullबदले का डिफ़ॉल्ट व्यवहार है ।

हालाँकि, आप एक सर्वर-साइड हुक सेट कर सकते हैं, जो यह जाँचता है कि कोई भी मर्ज कमिट ( ऐसा कुछ , शायद) नहीं करता है।

कुछ कॉन्फ़िगरेशन विकल्प भी हैं जिनकी आपको रुचि हो सकती है। सभी डेवलपर्स जो रिमोट रिपॉजिटरी से क्लोन करते हैं, उन्हें इसे स्वयं मैन्युअल रूप से सेट करना होगा।

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 शाखा के लिए पिछली कॉन्फ़िगरेशन कमांड चलाना एक परेशानी हो सकती है, इसलिए आप Git को कॉन्फ़िगर करने के लिए इसे हर नई शाखा के लिए स्वचालित रूप से सेट कर सकते हैं:

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
डॉनववोटर, आप जो भी हैं, कृपया अपने कारणों की व्याख्या करें। एक टिप्पणी के बिना downvoting मेरे लिए पूरी तरह से मनमाना और असंयमित लगता है।
Daishi

1

वर्तमान में रिपॉजिटरी के लिए डिफ़ॉल्ट पॉलिसी को सेट करने का कोई तरीका नहीं है।

यदि आप इसे अपने लिए चाहते हैं और आप कम से कम 1.7.9 git का उपयोग करते हैं, तो आप विश्व स्तर पर pull.rebaseविन्यास को निम्नानुसार सेट कर सकते हैं :

git config --global pull.rebase true

लेकिन आपको प्रत्येक मशीन पर करना होगा। एक विकल्प उस विकल्प के साथ डिफ़ॉल्ट उपयोगकर्ता होम टेम्प्लेट / कंकाल को कॉन्फ़िगर करना हो सकता है। हालाँकि, उपयोगकर्ता उस विकल्प को बदल सकते हैं।

यदि आप मर्ज नहीं चाहते हैं, तो आप मर्ज के साथ पुश अस्वीकार करने के लिए एक सर्वर-साइड हुक को परिभाषित कर सकते हैं।

आपके संदर्भ के लिए, पुल के लिए उसका स्रोत दस्तावेज है।

जब सही होता है, "ब्राइट पुल" चलाने पर डिफॉल्ट रिमोट से डिफॉल्ट ब्रांच को मर्ज करने के बजाय, ब्रांच की गई ब्रांच के शीर्ष पर रिबास ब्रांच करें। प्रति-शाखा के आधार पर इसे स्थापित करने के लिए "शाखा..श्रेब" देखें।

जब विलय होता है, तो रिबेट को जमा करने के लिए --rebase- मर्ज विकल्प पास करें ताकि रिबेज़ में स्थानीय मर्ज कमिट शामिल हों ( विवरण के लिए गिट-रिबेस ) देखें।

जब संरक्षित करते हैं, तो git rebase के साथ पास-मर्ज-मर्ज भी करते हैं ताकि स्थानीय रूप से प्रतिबद्ध मर्ज कमिट्स को गिट पुल को चलाकर चपटा न किया जा सके।

जब मान इंटरेक्टिव होता है, तो रिबास इंटरैक्टिव मोड में चलाया जाता है।

नोट: यह संभवतः खतरनाक ऑपरेशन है; जब तक आप निहितार्थ को नहीं समझेंगे, तब तक इसका उपयोग न करें ( विवरण के लिए गिट-रिबेस ) देखें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.