Sự hợp nhất cuối cùng để thay thế vimdiff
Đây là một kiểu nói rất hay, nhưng cuối cùng tôi đã hội tụ thành một vimmer sau khi thử vimdiff.
Để giải quyết xung đột hợp nhất, điều tôi hầu như luôn cần là xem:
- XA XÔI
- ĐỊA PHƯƠNG
- hai khác biệt:
- khác biệt
- khác biệt địa phương
để sau đó cố gắng đặt cả hai cùng nhau.
Trong khi vimdiff không hiển thị BASE, LOCAL và REMote trong màn hình:
+--------------------------------+
| LOCAL | BASE | REMOTE |
+--------------------------------+
| MERGED |
+--------------------------------+
Tôi không biết làm thế nào để làm cho nó hiển thị rõ ràng hai khác biệt mà tôi cần bên cạnh đó bằng cách nhìn phải trái phải rất nhiều lần.
Hơn nữa, ĐỊA PHƯƠNG và XÓA đã được hiển thị trong các dấu xung đột hợp nhất git, vì vậy tôi không thu được nhiều từ một công cụ hiển thị lại chúng.
Do đó, thay vào đó, tôi đã tạo ra "Difftool" nhỏ bé của riêng mình, thứ thực sự cho thấy sự khác biệt mà tôi đã thiếu:
~ / 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
GitHub ngược dòng .
Và cài đặt nó với:
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'
Bây giờ, khi bạn làm:
git mergetool -t cirosantilli-mergetool
nó hiển thị hai khác biệt mà tôi muốn trên thiết bị đầu cuối, ví dụ: một cái gì đó cùng:
--- ./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
Vì vậy, bạn có thể thấy ở đây hai khác biệt đổ vào thiết bị đầu cuối:
RealView_BASE_15560.py
đấu với RealView_LOCAL_15560.py
RealView_BASE_15560.py
đấu với RealView_REMOTE_15560.py
Nếu khác biệt là lớn, tôi sẽ chỉ tìm kiếm với siêu năng lực tmux của mình .
Có, bạn sẽ mất một số phím tắt mà vimdiff cung cấp, nhưng trong việc giải quyết xung đột chung đòi hỏi phải sao chép cẩn thận từ cả hai phiên bản, tôi có thể làm tốt trong phiên vim bình thường với các dấu xung đột git.
Quan sát và khuếch tán các tập tin trong khi vimdiff
đang chạy
Trước khi tôi ngồi xuống và tự động thiết lập hoàn hảo với cirosantilli-mergetool
, đây là những gì tôi đã làm để có được hai khác biệt tôi cần.
Trong khi git mergetool
đang chạy vimdiff
, nếu có xung đột trên một tệp có tên, giả sử main.py
, git sẽ tạo các tệp cho mỗi phiên bản, được đặt tên là:
main_BASE_1367.py
main_LOCAL_1367.py
main_REMOTE_1367.py
trong cùng thư mục với main.py
vị trí 1367
PID của git mergetool, và do đó là một số nguyên "ngẫu nhiên", như đã đề cập tại: Trong xung đột hợp nhất git, các tệp BACKUP, BASE, LOCAL và REMOTE được tạo ra là gì?
Vì vậy, để xem các khác biệt mà tôi muốn, trước tiên tôi tìm các tệp được tạo git status
và sau đó mở các thiết bị đầu cuối mới và thực hiện một vimdiff giữa các cặp tệp mà tôi quan tâm:
vim -d main_BASE_1367.py main_LOCAL_1367.py
vim -d main_BASE_1367.py main_REMOTE_1367.py
Cùng với git mergetool
, thông tin này giúp rất nhiều để tìm hiểu những gì đang xảy ra một cách nhanh chóng!
Ngoài ra, ngay cả khi mergetool đang chạy, bạn chỉ có thể mở tệp:
vim main.py
trực tiếp và chỉnh sửa nó ở đó nếu bạn cảm thấy rằng nó sẽ dễ dàng hơn với một cửa sổ soạn thảo lớn hơn.
Nhảy trực tiếp để hợp nhất xung đột
Trong khi ]c
nhảy đến điểm khác biệt tiếp theo bên trong vimdiff, không phải lúc nào cũng có xung đột hợp nhất ở đó.
Để giúp với điều này, tôi có trong ~/.vimrc
:
# Git Merge conflict
nnoremap <leader>gm /\v^\<\<\<\<\<\<\< \|\=\=\=\=\=\=\=$\|\>\>\>\>\>\>\> /<cr>
trong đó tìm thấy các xung đột trực tiếp.
git nhập
Có lẽ lựa chọn tốt nhất là từ bỏ việc sử dụng vimdiff và dựa vào vim + git imerge thông thường đã được đề cập tại: Làm thế nào tôi có thể tìm ra Git nào gây ra xung đột? vì đường cong học tập của vimdiff gây phiền nhiễu và nó không thực hiện các chức năng chúng ta cần nhất.