-
Notifications
You must be signed in to change notification settings - Fork 179
/
howtos.mld
49 lines (36 loc) · 1.99 KB
/
howtos.mld
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
{0 How-To's}
Using an autoformatter will make your process easier but it can also introduce a few pain points. Here are how to solve the most commonly encountered pain points.
{1 Using OCamlFormat without breaking [git blame]}
- Create [.git-blame-ignore-revs] in your project
- Add revision(s) where the code was re-formatted
{[
# Apply new formatting with OCamlFormat
2ceaf76b9f84cb632327c1479d0f30acfa3eeba2
]}
- Run [git config --local blame.ignoreRevsFile .git-blame-ignore-revs]
- All future use of [git blame] will now provide blame information omitting the reformatting commits: lines that were changed or added by an ignored commit will be blamed on the previous commit that changed that line or nearby lines.
{1 Resolve merge conflicts using Merge-fmt and OCamlFormat}
{{:https://github.com/hhugo/merge-fmt}Merge-fmt} is a small wrapper on top of [git] commands to help resolve conflicts caused by code formatters.
There are three ways to use [merge-fmt].
{2 Standalone}
Just call [merge-fmt] while there are unresolved conflicts. [merge-fmt] will try to
resolve conflicts automatically.
{2 As a Git mergetool}
[merge-fmt] can act as a git {{:https://git-scm.com/docs/git-mergetool}mergetool}.
First configure the current git repository with
{[
merge-fmt setup-mergetool
git config --local mergetool.mergefmt.cmd 'merge-fmt mergetool --base=$BASE --current=$LOCAL --other=$REMOTE -o $MERGED'
git config --local mergetool.mergefmt.trustExitCode true
]}
Then, use [git mergetool] to resolve conflicts with [git mergetool -t mergefmt].
{2 As a git merge driver}
[merge-fmt] can act as a git {{:https://git-scm.com/docs/gitattributes}merge driver}.
Configure the current git repository to use [merge-fmt] as the default merge driver.
{[
$ merge-fmt setup-merge
git config --local merge.mergefmt.name 'merge-fmt driver'
git config --local merge.mergefmt.driver 'merge-fmt mergetool --base=%O --current=%A --other=%B -o %A --name=%P'
git config --local merge.tool 'mergefmt'
git config --local merge.default 'mergefmt'
]}