You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
194 lines
6.8 KiB
194 lines
6.8 KiB
Description |
|
^^^^^^^^^^^ |
|
|
|
When specifying `--tool=vimdiff` in `git mergetool` Git will open Vim with a 4 |
|
windows layout distributed in the following way: |
|
.... |
|
------------------------------------------ |
|
| | | | |
|
| LOCAL | BASE | REMOTE | |
|
| | | | |
|
------------------------------------------ |
|
| | |
|
| MERGED | |
|
| | |
|
------------------------------------------ |
|
.... |
|
`LOCAL`, `BASE` and `REMOTE` are read-only buffers showing the contents of the |
|
conflicting file in specific commits ("commit you are merging into", "common |
|
ancestor commit" and "commit you are merging from" respectively) |
|
|
|
`MERGED` is a writable buffer where you have to resolve the conflicts (using the |
|
other read-only buffers as a reference). Once you are done, save and exit Vim as |
|
usual (`:wq`) or, if you want to abort, exit using `:cq`. |
|
|
|
Layout configuration |
|
^^^^^^^^^^^^^^^^^^^^ |
|
|
|
You can change the windows layout used by Vim by setting configuration variable |
|
`mergetool.vimdiff.layout` which accepts a string where the following separators |
|
have special meaning: |
|
|
|
- `+` is used to "open a new tab" |
|
- `,` is used to "open a new vertical split" |
|
- `/` is used to "open a new horizontal split" |
|
- `@` is used to indicate which is the file containing the final version after |
|
solving the conflicts. If not present, `MERGED` will be used by default. |
|
|
|
The precedence of the operators is this one (you can use parentheses to change |
|
it): |
|
|
|
`@` > `+` > `/` > `,` |
|
|
|
Let's see some examples to understand how it works: |
|
|
|
* `layout = "(LOCAL,BASE,REMOTE)/MERGED"` |
|
+ |
|
-- |
|
This is exactly the same as the default layout we have already seen. |
|
|
|
Note that `/` has precedence over `,` and thus the parenthesis are not |
|
needed in this case. The next layout definition is equivalent: |
|
|
|
layout = "LOCAL,BASE,REMOTE / MERGED" |
|
-- |
|
* `layout = "LOCAL,MERGED,REMOTE"` |
|
+ |
|
-- |
|
If, for some reason, we are not interested in the `BASE` buffer. |
|
.... |
|
------------------------------------------ |
|
| | | | |
|
| | | | |
|
| LOCAL | MERGED | REMOTE | |
|
| | | | |
|
| | | | |
|
------------------------------------------ |
|
.... |
|
-- |
|
* `layout = "MERGED"` |
|
+ |
|
-- |
|
Only the `MERGED` buffer will be shown. Note, however, that all the other |
|
ones are still loaded in vim, and you can access them with the "buffers" |
|
command. |
|
.... |
|
------------------------------------------ |
|
| | |
|
| | |
|
| MERGED | |
|
| | |
|
| | |
|
------------------------------------------ |
|
.... |
|
-- |
|
* `layout = "@LOCAL,REMOTE"` |
|
+ |
|
-- |
|
When `MERGED` is not present in the layout, you must "mark" one of the |
|
buffers with an asterisk. That will become the buffer you need to edit and |
|
save after resolving the conflicts. |
|
.... |
|
------------------------------------------ |
|
| | | |
|
| | | |
|
| | | |
|
| LOCAL | REMOTE | |
|
| | | |
|
| | | |
|
| | | |
|
------------------------------------------ |
|
.... |
|
-- |
|
* `layout = "LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE"` |
|
+ |
|
-- |
|
Three tabs will open: the first one is a copy of the default layout, while |
|
the other two only show the differences between (`BASE` and `LOCAL`) and |
|
(`BASE` and `REMOTE`) respectively. |
|
.... |
|
------------------------------------------ |
|
| <TAB #1> | TAB #2 | TAB #3 | | |
|
------------------------------------------ |
|
| | | | |
|
| LOCAL | BASE | REMOTE | |
|
| | | | |
|
------------------------------------------ |
|
| | |
|
| MERGED | |
|
| | |
|
------------------------------------------ |
|
.... |
|
.... |
|
------------------------------------------ |
|
| TAB #1 | <TAB #2> | TAB #3 | | |
|
------------------------------------------ |
|
| | | |
|
| | | |
|
| | | |
|
| BASE | LOCAL | |
|
| | | |
|
| | | |
|
| | | |
|
------------------------------------------ |
|
.... |
|
.... |
|
------------------------------------------ |
|
| TAB #1 | TAB #2 | <TAB #3> | | |
|
------------------------------------------ |
|
| | | |
|
| | | |
|
| | | |
|
| BASE | REMOTE | |
|
| | | |
|
| | | |
|
| | | |
|
------------------------------------------ |
|
.... |
|
-- |
|
* `layout = "LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE + (LOCAL/BASE/REMOTE),MERGED"` |
|
+ |
|
-- |
|
Same as the previous example, but adds a fourth tab with the same |
|
information as the first tab, with a different layout. |
|
.... |
|
--------------------------------------------- |
|
| TAB #1 | TAB #2 | TAB #3 | <TAB #4> | |
|
--------------------------------------------- |
|
| LOCAL | | |
|
|---------------------| | |
|
| BASE | MERGED | |
|
|---------------------| | |
|
| REMOTE | | |
|
--------------------------------------------- |
|
.... |
|
Note how in the third tab definition we need to use parenthesis to make `,` |
|
have precedence over `/`. |
|
-- |
|
|
|
Variants |
|
^^^^^^^^ |
|
|
|
Instead of `--tool=vimdiff`, you can also use one of these other variants: |
|
|
|
* `--tool=gvimdiff`, to open gVim instead of Vim. |
|
|
|
* `--tool=nvimdiff`, to open Neovim instead of Vim. |
|
|
|
When using these variants, in order to specify a custom layout you will have to |
|
set configuration variables `mergetool.gvimdiff.layout` and |
|
`mergetool.nvimdiff.layout` instead of `mergetool.vimdiff.layout` |
|
|
|
In addition, for backwards compatibility with previous Git versions, you can |
|
also append `1`, `2` or `3` to either `vimdiff` or any of the variants (ex: |
|
`vimdiff3`, `nvimdiff1`, etc...) to use a predefined layout. |
|
In other words, using `--tool=[g,n,]vimdiffx` is the same as using |
|
`--tool=[g,n,]vimdiff` and setting configuration variable |
|
`mergetool.[g,n,]vimdiff.layout` to... |
|
|
|
* `x=1`: `"@LOCAL, REMOTE"` |
|
* `x=2`: `"LOCAL, MERGED, REMOTE"` |
|
* `x=3`: `"MERGED"` |
|
|
|
Example: using `--tool=gvimdiff2` will open `gvim` with three columns (LOCAL, |
|
MERGED and REMOTE).
|
|
|