Git MergetoolがVimdiffで4つのWindowsを開くのはなぜですか? (私は3を期待します)

StackOverflow https://stackoverflow.com/questions/7309707

  •  26-10-2019
  •  | 
  •  

質問

紛争に会ったとき、私は使用しようとしました 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

注:変更したい場合があります vimmvim また 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プラグインです。これにより、紛争のさまざまな見方を簡単にシャッフルできます。また、非常に迅速で、簡単で、より直感的にマージするのに良い仕事をしています。これが次のとおりです スクリーンキャスト.

リストしたファイルは次のとおりです。

  1. 競合を含むローカルファイル。
  2. 統合しているブランチ内のファイル。
  3. 統合しているブランチ内のファイル。
  4. 両方のBranch Ancesestorノードにあるファイル。このファイルは、何が起こっているのかを理解するのに非常に役立ちます!

お役に立てれば。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top