Git MergetoolがVimdiffで4つのWindowsを開くのはなぜですか? (私は3を期待します)
質問
紛争に会ったとき、私は使用しようとしました git-mergetool
それを解決するために。入力しました:
>git mergetool -t vimdiff
開かれた vimdiff
4ウェイでは、3ウェイではありません。 vimdiffの私の分割窓は次のように見えます:
:ls
1 #a "Gemfile.lock" line 1
2 %a "Gemfile.lock.LOCAL.4828.lock" line 1
3 a "Gemfile.lock.BASE.4828.lock" line 0
4 a "Gemfile.lock.REMOTE.4828.lock" line 0
彼らは何ですか? 3ウェイDIFF:ターゲットファイル、マージファイル、および作業ファイルが必要です。 gitまたはvimdiffを構成するにはどうすればよいですか?
解決
別の方法として、あなたは使用を考えましたか 逃亡者?
私はあなたに嘘をつくつもりはありません。 fugivite.vimは、史上最高のgitラッパーかもしれません。
優れたVimcastがあります、 fugitive.vim-マージの競合をVimdiffと解決します, 、ドリュー・ニールによる。これは逃亡者に関するシリーズの一部です。
Vimcasts Webサイトは、VIMの詳細を学ぶのに適した場所です。
Mergetoolとして逃亡者を使用するには、以下を使用できます。
git config --global mergetool.fugitive.cmd 'vim -f -c "Gdiff" "$MERGED"'
git config --global merge.tool fugitive
注:変更したい場合があります vim
に mvim
また gvim
.
逃亡者には、単にマージツールスクリプトであるだけでなく、提供するものがたくさんあるので、ドキュメントを読んだり、Vimcastをチェックしたりしてください。
他のヒント
Vimdiffと3つのWindowsでMergetoolを発行するための多くの調査の後、私はこの構成を思いつきました。これにより、3つのWindowsまたはデフォルトの4つのWindowsが必要なときに選択できます。
git config --global merge.tool vimdiff
git config --global alias.mt mergetool
git config --global mergetool.merge3.cmd 'vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"'
git config --global alias.m3 'mergetool -t merge3'
これで、3つのWindowsを入力するだけで始めることができます。
git m3
そして、デフォルト(4つのWindows)は、予想通りに機能します。
git mt
また、あなたはおそらくあなたの最後にこの線を追加したいと思います ~/.vimrc
また /etc/vim/vimrc
" shortcuts to vimdiff
let mapleader=','
let g:mapleader=','
if &diff
map <leader>1 :diffget LOCAL<CR>
map <leader>2 :diffget BASE<CR>
map <leader>3 :diffget REMOTE<CR>
endif
これにより、ようなショートカットが作成されます ,1
左からつかむには、 ,3
(両方のモードで)右からつかむと ,2
4つのWindowsモードでベース(中央ウィンドウ)からつかむ。
それは大いに役立ちます!
じぶんの ~/.gitconfig
ファイルは次のようになります:
[user]
name = Dr Beco
email = my@email
[merge]
tool = vimdiff
[mergetool "merge3"]
cmd = vim -d -c \"wincmd l\" \"$LOCAL\" \"$MERGED\" \"$REMOTE\"
[alias]
lo = log --pretty=format:\"%h %ce %cd %s\" --graph
co = checkout
ci = commit
cm = commit -a -m
st = status
br = branch
m3 = mergetool -t merge3
mt = mergetool
[diff]
tool = vimdiff
これがあなた(そしてここに行く人)が役立つことを願っています。
コマンドを少し変更します このページ:
git config --global mergetool.vimdiff3.cmd 'vim -f -d "$LOCAL" "$MERGED" "$REMOTE"'
git config --global merge.tool vimdiff3
- 「マージ」はあなたの作業コピーです。
- 「ローカル」ブランチにあるファイルは、変更を加えようとしています
- マージしようとしているブランチからのファイルを「リモート」します。
そして、あなたはコマンドを実行します: git mergetool
.
ノート: : 私が使う 逃亡者 また、強くお勧めします。
注:記載されているように3つのウィンドウのみを使用できますが ベコ博士's 答え
(vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"'
),
4ウィンドウモードは、GIT 2.8で強化されています (2016年3月)
見る コミット2300328 (2016年1月29日) ディクソン・ウォン(diwo
).
(融合 Junio C Hamano- gitster
-- の コミット82C17B7, 、2016年2月17日)
vimdiff
」のバックエンド」git mergetool
「左から右に読む人の大多数の人の期待に一致する順序でバッファをアレンジし、その後バッファーを上に下げて、その順序に基づいてローカルベースのリモートマージウィンドウにバッファー1 2 3 4を割り当てるように調整するように微調整されました。 。
内部的には、Gitが使用します。
"$merge_tool_path" -f -d -c '4wincmd w | wincmd J' \
"$LOCAL" "$BASE" "$REMOTE" "$MERGED"
それ以外の:
"$merge_tool_path" -f -d -c 'wincmd J' \
"$MERGED" "$LOCAL" "$BASE" "$REMOTE"
mergetool
: :3方向DiffでVIM/GVIMバッファーを並べ替えますデフォルトを呼び出すとき(g)
vimdiff
3方向マージでは、マージされたファイルは最初のバッファとしてロードされますが、4番目のウィンドウとして下部に移動します。
これにより、間の切断が発生しますvim
ウィンドウ位置で動作するコマンド(例: Ctrl-w_w)およびバッファインデックスで動作するもの(例: 行う/DP).この変更により、バッファーはウィンドウと同じインデックスになり、カーソルをボトムウィンドウとしてマージした結果にデフォルトに保ちます。
逃亡者の推薦を二番目にします。
試してみることもできます splice.vim. 。これは、GitまたはMercurial Mergetoolドロップインの交換として機能するように設計されたVIMプラグインです。これにより、紛争のさまざまな見方を簡単にシャッフルできます。また、非常に迅速で、簡単で、より直感的にマージするのに良い仕事をしています。これが次のとおりです スクリーンキャスト.
リストしたファイルは次のとおりです。
- 競合を含むローカルファイル。
- 統合しているブランチ内のファイル。
- 統合しているブランチ内のファイル。
- 両方のBranch Ancesestorノードにあるファイル。このファイルは、何が起こっているのかを理解するのに非常に役立ちます!
お役に立てれば。