git-lfs-merge-driver
- Merge text-based LFS files
git lfs merge-driver
options
Merge text files stored in Git LFS using the default Git merge machinery, or a custom merge driver if specified. Note that this, in general, does not support partial renames or copies because Git does not support them in this case.
This program is intended to be invoked automatically by Git and not by users manually. See CONFIGURATION for details on the configuration required for that.
--ancestor
path
Specify the file containing the ancestor revision.
--current
path
Specify the file containing the current revision.
--marker-size
num
Specify the conflict marker size as an integer.
--other
path
Specify the file containing the other revision.
--program
program
Specify a command, which is passed to the shell after substitution, that
performs the actual merge. If this is not specified, git merge-file
is
invoked with appropriate arguments to perform the merge of the file.
See CONFIGURATION for the sequences which are substituted here.
Git allows the use of a custom merge driver for files based on the merge
attribute set in .gitattributes
. By default, when using git lfs track
, this
value is set to lfs
.
Because Git LFS can be used to store both text and binary files and it isn't
always clear which behavior should be used, Git LFS does not enable this merge
driver by default. However, if you know that some or all of your files are text
files, then you can set the merge
attribute for those files to lfs-text
and
use git config
to set the merge driver like so:
console
$ git config merge.lfs-text.driver 'git lfs merge-driver --ancestor %O --current %A --other %B --marker-size %L --output %A'
This tells Git to invoke the custom Git LFS merge driver, which in turn uses
Git's merge machinery, to merge files where the merge
attribute is set to
lfs-text
. Note that lfs-text
here is an example and any syntactically valid
value can be used.
If you are using a special type of file that needs rules different from Git's
standard merge machinery, you can also specify the --program
option, which
is passed to sh
after substituting its own percent-encoded escapes:
%A
: the current version%B
: the other version%D
: the destination version%O
: the ancestor version%L
: the conflict marker sizeNote that the percent sign must typically be doubled to prevent Git from substituting its own values here. Therefore, specifying the default behavior explicitly looks like this:
console
$ git config merge.lfs-text.driver \
'git lfs merge-driver --ancestor %O --current %A --other %B --marker-size %L --output %A --program '\''git merge-file --stdout --marker-size=%%L %%A %%O %%B >%%D'\'''
The exit status from the custom command should be zero on success or non-zero on conflicts or other failure.
Note that if no merge driver is specified for the value of the merge
attribute
(as is the case by default with merge=lfs
), then the default Git merge
strategy is used. For LFS files, this means that Git will try to merge the
pointer files, which usually is not useful.
git-merge(1), git-merge-file(1), gitattributes(5)
Part of the git-lfs(1) suite.