विमीडिफ को बदलने के लिए अंतिम मर्जेटोल
यह एक प्रकार की जीभ-इन-गाल है, लेकिन यह वही है जो मैंने vimdiff की कोशिश करने के बाद एक विमर के रूप में परिवर्तित किया।
एक मर्ज संघर्ष को हल करने के लिए, मुझे लगभग हमेशा जो देखने की जरूरत है वह है:
- REMOTE
- स्थानीय
- दो अंतर:
- अंतर दूर करें
- BASE LOCAL को अलग करें
फिर दोनों को एक साथ रखने की कोशिश करें।
जबकि vimdiff स्क्रीन में BASE, LOCAL और REMOTE दिखाता है:
+--------------------------------+
| LOCAL | BASE | REMOTE |
+--------------------------------+
| MERGED |
+--------------------------------+
मुझे नहीं पता कि इसे बनाने का तरीका स्पष्ट रूप से उन दो भिन्नताओं को दिखाता है जिनकी मुझे आवश्यकता है इसके अलावा दाएं बाएं सही समय का एक गुच्छा है।
इसके अलावा, LOCAL और REMOTE पहले से ही git मर्ज संघर्ष मार्करों में दिखाई दे रहे हैं, इसलिए मैं एक टूल से इतना हासिल नहीं करता हूं जो उन्हें फिर से दिखाता है।
इसलिए, मैंने इसके बजाय अपने स्वयं के "difftool" का निर्माण किया जो वास्तव में उस अंतर को दिखाता है जो मुझे याद आ रहा था:
~ / Bin / cirosantilli-mergetool
#!/usr/bin/env bash
BASE="$1"
LOCAL="$2"
REMOTE="$3"
diff --color -u "$BASE" "$LOCAL"
diff --color -u "$BASE" "$REMOTE"
exit 1
गिटहब ऊपर ।
और इसे स्थापित करें:
git config --global mergetool.cirosantilli-mergetool.cmd 'cirosantilli-mergetool $BASE $LOCAL $REMOTE'
git config --global mergetool.cirosantilli-mergetool.trustExitCode true
# If you want this to become your default mergetool.
#git config --global merge.tool 'cirosantilli-mergetool'
अब, जब आप करते हैं:
git mergetool -t cirosantilli-mergetool
यह दो भिन्न दिखाता है जो मैं टर्मिनल पर चाहता हूं, जैसे कुछ साथ:
--- ./src/dev/arm/RealView_BASE_15560.py 2019-12-27 13:46:41.967021591 +0000
+++ ./src/dev/arm/RealView_LOCAL_15560.py 2019-12-27 13:46:41.979021479 +0000
@@ -994,7 +994,7 @@
def setupBootLoader(self, cur_sys, loc):
if not cur_sys.boot_loader:
- cur_sys.boot_loader = [ loc('boot_emm.arm64'), loc('boot_emm.arm') ]
+ cur_sys.boot_loader = [ loc('boot.arm64'), loc('boot.arm') ]
cur_sys.atags_addr = 0x8000000
cur_sys.load_offset = 0x80000000
@@ -1054,7 +1054,7 @@
]
def setupBootLoader(self, cur_sys, loc):
- cur_sys.boot_loader = [ loc('boot_emm_v2.arm64') ]
+ cur_sys.boot_loader = [ loc('boot_v2.arm64') ]
super(VExpress_GEM5_V2_Base,self).setupBootLoader(
cur_sys, loc)
--- ./src/dev/arm/RealView_BASE_15560.py 2019-12-27 13:46:41.967021591 +0000
+++ ./src/dev/arm/RealView_REMOTE_15560.py 2019-12-27 13:46:41.991021366 +0000
@@ -610,10 +610,10 @@
def attachIO(self, *args, **kwargs):
self._attach_io(self._off_chip_devices(), *args, **kwargs)
- def setupBootLoader(self, cur_sys, loc):
- cur_sys.boot_loader = loc('boot.arm')
- cur_sys.atags_addr = 0x100
- cur_sys.load_offset = 0
+ def setupBootLoader(self, cur_sys, boot_loader, atags_addr, load_offset):
+ cur_sys.boot_loader = boot_loader
+ cur_sys.atags_addr = atags_addr
+ cur_sys.load_offset = load_offset
तो आप यहाँ देख सकते हैं कि दोनों टर्मिनल में अलग-अलग हैं:
RealView_BASE_15560.py
बनाम RealView_LOCAL_15560.py
RealView_BASE_15560.py
बनाम RealView_REMOTE_15560.py
यदि अंतर बड़े हैं, तो मैं अपने tmux सुपरपावर के साथ खोज करूंगा ।
हां, आप कुछ ऐसे शॉर्टकट खो देते हैं जो vimdiff प्रदान करता है, लेकिन सामान्य रूप से हल करने वाले संघर्षों में दोनों संस्करणों से सावधानीपूर्वक कॉपी पेस्ट की आवश्यकता होती है, जिसे मैं git संघर्ष मार्करों के साथ एक सामान्य विम सत्र के अंदर ठीक कर सकता हूं।
vimdiff
चल रहा है जब फ़ाइलों का अवलोकन और अंतर
इससे पहले कि मैं नीचे बैठती और अपने संपूर्ण सेटअप को स्वचालित करती cirosantilli-mergetool
, यह वही है जो मुझे अपनी ज़रूरत के अनुसार दो भिन्नताओं को प्राप्त करने के लिए कर रहा था।
जब कोई फ़ाइल नाम पर कोई विरोधाभास है, तो git mergetool
चल रहा vimdiff
है, कहते हैं main.py
, git प्रत्येक संस्करण के लिए फाइल बनाता है, नाम:
main_BASE_1367.py
main_LOCAL_1367.py
main_REMOTE_1367.py
समान निर्देशिका में main.py
जहां 1367
git mergetool का PID है, और इसलिए "यादृच्छिक" पूर्णांक है, जैसा कि नीचे उल्लेख किया गया है: git मर्ज संघर्ष में, BACKUP, BASE, LOCAL, और REMOTE दोनों क्या उत्पन्न होते हैं?
इसलिए, अपने इच्छित अंतर को देखने के लिए, मैं पहले जनरेट की गई फ़ाइलों को ढूंढता हूं git status
, और फिर नए टर्मिनल खोलता हूं और उन फाइलों के जोड़े के बीच एक विमीडफ करता हूं, जिसकी मुझे परवाह है:
vim -d main_BASE_1367.py main_LOCAL_1367.py
vim -d main_BASE_1367.py main_REMOTE_1367.py
साथ में git mergetool
, यह जानकारी ए लॉट को यह पता लगाने में मदद करती है कि क्या जल्दी हो रहा है!
इसके अलावा, भले ही मेरिजेट चल रहा हो, आप केवल फ़ाइल खोल सकते हैं:
vim main.py
सीधे और इसे वहां संपादित करें यदि आपको लगता है कि यह एक बड़ी संपादक विंडो के साथ आसान होने जा रहा है।
संघर्षों को मर्ज करने के लिए सीधे कूदें
हालांकि ]c
अगले विंपिड के अंदर अलग-अलग बिंदुओं पर कूदता है, वहाँ हमेशा एक मर्ज संघर्ष नहीं होता है।
इस के साथ मदद करने के लिए, मैं अपने में है ~/.vimrc
:
# Git Merge conflict
nnoremap <leader>gm /\v^\<\<\<\<\<\<\< \|\=\=\=\=\=\=\=$\|\>\>\>\>\>\>\> /<cr>
जो सीधे संघर्षों का पता लगाता है।
git इमर्ज
शायद सबसे अच्छा विकल्प केवल विमडिफ का उपयोग करने पर छोड़ देना है और नियमित रूप से विम + गिट इमर्ज पर भरोसा करना है जो इस पर उल्लेख किया गया था: मैं कैसे पता लगा सकता हूं कि कौन से जीआईटी संघर्ष का कारण बनता है? चूंकि विम्डिफ की सीखने की अवस्था कष्टप्रद है, और यह उन कार्यों को नहीं करता है जिनकी हमें सबसे अधिक आवश्यकता होती है।