aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md62
1 files changed, 61 insertions, 1 deletions
diff --git a/README.md b/README.md
index 973dc4a..011ba65 100644
--- a/README.md
+++ b/README.md
@@ -145,7 +145,9 @@ with the one from [GNU diffutils](https://www.gnu.org/software/diffutils/). You
may set up a path to such `diff` (or a wrapper script) via environment variable
`WERGE_DIFF`.
-## Use with `git`
+## Integration with `git`
+
+### Automerging conflicts
`werge` can automatically process files that are marked in `git` as merge
conflicts:
@@ -161,6 +163,64 @@ settings it runs `git add` on them. The current changes in the files are
replaced by the merged (or partially merged) state; backups are written
automatically to `filename.werge-backup`.
+Optionally, you can specify exact files to be automerged. That is useful for
+cases when only some of the conflicting files should be processed by `werge`:
+
+```sh
+$ werge git my/conflicting/file.txt
+```
+
+Support for merging complex types of changes (deletes, directory moves,
+symlinks, ...) via this interface is currently limited. `werge` can be used as
+a mergetool or a merge driver to ameliorate that.
+
+### Use as `git difftool` and `git mergetool`
+
+The `git` config below allows direct use of `werge` as `git difftool -t werge`
+and `git mergetool -t werge`:
+```ini
+[difftool "werge"]
+ cmd = werge diff -G $LOCAL $REMOTE
+[mergetool "werge"]
+ cmd = werge merge $LOCAL $BASE $REMOTE > $MERGED
+ trustExitCode = true
+
+# variant for separate resolution of space (solves more conflicts):
+[mergetool "spacewerge"]
+ cmd = werge merge -s $LOCAL $BASE $REMOTE > $MERGED
+ trustExitCode = true
+```
+
+One issue with `git` mergetools is that they are supposed to be interactive,
+and thus `git` assumes them to always produce a completely merged, conflictless
+result. In turn, the auto-merging with `git mergetool -t werge` fails with
+conflicts, `git` assumes a complete failure and restores the original version
+from the backup. To enable a more useful behavior, use `werge` as a merge
+driver (see below).
+
+### Use as a `git` merge driver
+
+Add this to your git config:
+```ini
+[merge "werge"]
+ name = werge
+ driver = werge merge %A %O %B > %P
+ recursive = binary
+```
+
+Then, specify that the "werge" driver should be used for certain files in your
+repository's `.gitattributes`:
+```
+*.md merge=werge
+*.tex merge=werge
+# ... etc
+```
+
+With this in place, `git merge` will automatically run `werge` to merge the
+marked files in the repository. On conflict, you will have the files marked
+with the usual (werge's usual) conflict markers, and you will be able to
+resolve them just as with the normal merging workflow.
+
## Current `--help` and features
```