जब मैं git merge किसी अन्य शाखा में एक शाखा करता हूं, तो मुझे --edit --log विकल्प पास करना अच्छा लगता है। मैं इसे स्वचालित बनाना चाहता हूं, लेकिन यह नहीं मिल सकता।

मैंने क्या प्रयास किया:

मेरे वैश्विक .gitconfig के [merge] भाग को सेट करें

[merge]
    edit = true
    log = 20

गिट मर्ज अपने डिफ़ॉल्ट व्यवहार को नहीं बदलता है।

नोट: मेरा मानना ​​है कि वे विकल्प कॉन्फ़िगरेशन फ़ाइल के लिए उपलब्ध नहीं हैं क्योंकि मैं उन्हें git help -c | grep merge के आउटपुट में नहीं देख सकता

merge का उपनाम बनाएं

अगर मैं अपने उपनाम को पहले तरीके से परिभाषित करता हूं:

[alias]
    merge = merge --edit --log

या वह दूसरा:

[alias]
    merge = "! git merge $* --edit --log #"

तब मैं गिट के व्यवहार में कोई बदलाव नहीं देख सकता।

अगर मैं अपने उपनाम को कुछ और कहता हूं जो merge है, तो यह अपेक्षा के अनुरूप काम करता है (संपादन और लॉग विकल्प जोड़ना)।


तो, क्या डिफ़ॉल्ट रूप से git merge --edit --log का उपयोग करने का कोई समाधान है?

0
Simpom 11 मई 2021, 13:40
2
संक्षिप्त उत्तर: इसे अलग नाम दें। कमांड को आरक्षित कीवर्ड के रूप में मानें।
 – 
Romain Valeri
11 मई 2021, 13:48
1
(RomainValeri की टिप्पणी पर एक बिंदु पर जोर देने के लिए): अंतर्निहित कमांड (merge, add, checkout ...) को आरक्षित कीवर्ड के रूप में मानें
 – 
LeGEC
11 मई 2021, 14:02
उपनाम समाधान केवल एक समाधान था: मैं [merge] अनुभाग के edit=true ; log = 20 विकल्पों को लागू करना पसंद करता, ताकि यह सभी सॉफ़्टवेयर के लिए डिफ़ॉल्ट व्यवहार हो जो git मर्ज कमांड भेजते हैं
 – 
Simpom
11 मई 2021, 14:45
यह मुश्किल है क्योंकि यह सिर्फ गिट नहीं होगा जिसे इसका समर्थन करने की आवश्यकता होगी। शायद libgit2 को भी इसका समर्थन करने की आवश्यकता होगी क्योंकि यह सामान्य रूप से सॉफ़्टवेयर के अन्य टुकड़ों में लागू होता है जो गिट (जैसे आईडीई) का समर्थन करते हैं।
 – 
eftshift0
11 मई 2021, 15:22
@ eftshift0: क्या मुझे यह निष्कर्ष निकालना चाहिए कि मैं जो करना चाहता हूं वह समर्थित नहीं है? मुझे लगा कि मैं sth को याद कर रहा हूं, लेकिन अगर यह संभव नहीं है, तो मैं एक उपनाम के साथ काम करना स्वीकार करता हूं।
 – 
Simpom
11 मई 2021, 15:48

1 उत्तर

सबसे बढ़िया उत्तर

जैसा कि अन्य ने टिप्पणियों में उल्लेख किया है, यदि आप एक उपनाम merge का नाम देते हैं, तो Git इसे पूरी तरह से अनदेखा कर देता है। अर्थात् दिया गया है:

[alias]
    merge = foo
    marge = foo

रनिंग git merge मानक git merge को चलाता है, लेकिन git marge को चलाने से आपको git foo के Git कमांड न होने के बारे में एक त्रुटि मिलती है (यह मानते हुए कि आपने खुद को git-foo नहीं बनाया है। आदेश, निश्चित रूप से)।

यह सभी मानक Git कमांड के लिए सही है।


कोई merge.edit सेटिंग नहीं है। या—इसी तरह—आप अपनी पसंद की किसी भी चीज़ पर merge.edit सेट कर सकते हैं,1 लेकिन git merge कभी भी सेटिंग का निरीक्षण नहीं करते हैं, इसलिए इससे कोई फ़र्क नहीं पड़ता।

merge.log सेटिंग है। यह डिफ़ॉल्ट रूप से false है, अर्थात, यदि आपने इसे सेट नहीं किया है, या यदि आप इसे false पर सेट करते हैं, तो git merge डिफ़ॉल्ट रूप से वैसा ही व्यवहार करता है जैसा वह करता है। इसे true पर सेट करने का वही प्रभाव होता है जो इसे 20 नंबर पर सेट करता है।

git merge के लिए डिफ़ॉल्ट --edit है, जब तक कि मर्ज संदेश -m या -F के साथ निर्दिष्ट न हो। यदि आप git pull द्वारा चलाए गए मर्ज का उपयोग करते हैं, तो --edit क्रिया भी डिफ़ॉल्ट है।

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

यह सब कमांड लाइन के लिए विशिष्ट है जैसा कि Git द्वारा ही लागू किया गया है। यदि आप अन्य सॉफ़्टवेयर (उदा., ग्रहण) का उपयोग कर रहे हैं, तो उस अन्य सॉफ़्टवेयर का शायद अपना कार्यान्वयन है और Git काम करने के तरीके को पूरी तरह से अनदेखा कर सकता है।


1

git config दस्तावेज़ों में उन सभी सेटिंग्स की मास्टर सूची होनी चाहिए जो गिट के सभी आदेशों के लिए सार्थक हैं। ध्यान दें कि कभी-कभी चीजें फिसल जाती हैं: उदाहरण के लिए, log.decorate को auto पर सेट किया जा सकता है, और यह लंबे समय तक सही था लेकिन Git 2.9.0 तक दस्तावेज नहीं था।

2मुझे लगता है कि यह थोड़ा दुर्भाग्यपूर्ण है कि Git इसे स्थानों में फास्ट-फॉरवर्ड मर्ज कहता है।

1
torek 12 मई 2021, 03:48