|
<!DOCTYPE html> |
|
<html> |
|
<head> |
|
<meta http-equiv='content-type' content='text/html;charset=utf8'> |
|
<meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'> |
|
<title>git-lfs-merge-driver(1) - Merge text-based LFS files</title> |
|
<style type='text/css' media='all'> |
|
|
|
body#manpage {margin:0} |
|
.mp {max-width:100ex;padding:0 9ex 1ex 4ex} |
|
.mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0} |
|
.mp h2 {margin:10px 0 0 0} |
|
.mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex} |
|
.mp h3 {margin:0 0 0 4ex} |
|
.mp dt {margin:0;clear:left} |
|
.mp dt.flush {float:left;width:8ex} |
|
.mp dd {margin:0 0 0 9ex} |
|
.mp h1,.mp h2,.mp h3,.mp h4 {clear:left} |
|
.mp pre {margin-bottom:20px} |
|
.mp pre+h2,.mp pre+h3 {margin-top:22px} |
|
.mp h2+pre,.mp h3+pre {margin-top:5px} |
|
.mp img {display:block;margin:auto} |
|
.mp h1.man-title {display:none} |
|
.mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143} |
|
.mp h2 {font-size:16px;line-height:1.25} |
|
.mp h1 {font-size:20px;line-height:2} |
|
.mp {text-align:justify;background:#fff} |
|
.mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211} |
|
.mp h1,.mp h2,.mp h3,.mp h4 {color:#030201} |
|
.mp u {text-decoration:underline} |
|
.mp code,.mp strong,.mp b {font-weight:bold;color:#131211} |
|
.mp em,.mp var {font-style:italic;color:#232221;text-decoration:none} |
|
.mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff} |
|
.mp b.man-ref {font-weight:normal;color:#434241} |
|
.mp pre {padding:0 4ex} |
|
.mp pre code {font-weight:normal;color:#434241} |
|
.mp h2+pre,h3+pre {padding-left:0} |
|
ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px} |
|
ol.man-decor {width:100%} |
|
ol.man-decor li.tl {text-align:left} |
|
ol.man-decor li.tc {text-align:center;letter-spacing:4px} |
|
ol.man-decor li.tr {text-align:right;float:right} |
|
</style> |
|
</head> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<body id='manpage'> |
|
<div class='mp' id='man'> |
|
|
|
<div class='man-navigation' style='display:none'> |
|
<a href="#NAME">NAME</a> |
|
<a href="#SYNOPSIS">SYNOPSIS</a> |
|
<a href="#DESCRIPTION">DESCRIPTION</a> |
|
<a href="#OPTIONS">OPTIONS</a> |
|
<a href="#CONFIGURATION">CONFIGURATION</a> |
|
<a href="#SEE-ALSO">SEE ALSO</a> |
|
</div> |
|
|
|
<ol class='man-decor man-head man head'> |
|
<li class='tl'>git-lfs-merge-driver(1)</li> |
|
<li class='tc'></li> |
|
<li class='tr'>git-lfs-merge-driver(1)</li> |
|
</ol> |
|
|
|
|
|
|
|
<h2 id="NAME">NAME</h2> |
|
<p class="man-name"> |
|
<code>git-lfs-merge-driver</code> - <span class="man-whatis">Merge text-based LFS files</span> |
|
</p> |
|
<h2 id="SYNOPSIS">SYNOPSIS</h2> |
|
|
|
<p><code>git lfs merge-driver</code> <a href="#OPTIONS" title="OPTIONS" data-bare-link="true">options</a></p> |
|
|
|
<h2 id="DESCRIPTION">DESCRIPTION</h2> |
|
|
|
<p>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.</p> |
|
|
|
<p>This program is intended to be invoked automatically by Git and not by users |
|
manually. See <a href="#CONFIGURATION" title="CONFIGURATION" data-bare-link="true">CONFIGURATION</a> for details on the configuration required for |
|
that.</p> |
|
|
|
<h2 id="OPTIONS">OPTIONS</h2> |
|
|
|
<ul> |
|
<li> |
|
<p><code>--ancestor</code> <var>path</var> |
|
Specify the file containing the ancestor revision.</p> |
|
</li> |
|
<li> |
|
<p><code>--current</code> <var>path</var> |
|
Specify the file containing the current revision.</p> |
|
</li> |
|
<li> |
|
<p><code>--marker-size</code> <var>num</var> |
|
Specify the conflict marker size as an integer.</p> |
|
</li> |
|
<li> |
|
<p><code>--other</code> <var>path</var> |
|
Specify the file containing the other revision.</p> |
|
</li> |
|
<li> |
|
<p><code>--program</code> <var>program</var> |
|
Specify a command, which is passed to the shell after substitution, that |
|
performs the actual merge. If this is not specified, <code>git merge-file</code> is |
|
invoked with appropriate arguments to perform the merge of the file.</p> |
|
|
|
<p>See <a href="#CONFIGURATION" title="CONFIGURATION" data-bare-link="true">CONFIGURATION</a> for the sequences which are substituted here.</p> |
|
</li> |
|
</ul> |
|
|
|
<h2 id="CONFIGURATION">CONFIGURATION</h2> |
|
|
|
<p>Git allows the use of a custom merge driver for files based on the <code>merge</code> |
|
attribute set in <code>.gitattributes</code>. By default, when using <code>git lfs track</code>, this |
|
value is set to <code>lfs</code>.</p> |
|
|
|
<p>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 <code>merge</code> attribute for those files to <code>lfs-text</code> and |
|
use <code>git config</code> to set the merge driver like so:</p> |
|
|
|
<p><code>console |
|
$ git config merge.lfs-text.driver 'git lfs merge-driver --ancestor %O --current %A --other %B --marker-size %L --output %A' |
|
</code></p> |
|
|
|
<p>This tells Git to invoke the custom Git LFS merge driver, which in turn uses |
|
Git's merge machinery, to merge files where the <code>merge</code> attribute is set to |
|
<code>lfs-text</code>. Note that <code>lfs-text</code> here is an example and any syntactically valid |
|
value can be used.</p> |
|
|
|
<p>If you are using a special type of file that needs rules different from Git's |
|
standard merge machinery, you can also specify the <code>--program</code> option, which |
|
is passed to <code>sh</code> after substituting its own percent-encoded escapes:</p> |
|
|
|
<ul> |
|
<li> |
|
<code>%A</code>: the current version</li> |
|
<li> |
|
<code>%B</code>: the other version</li> |
|
<li> |
|
<code>%D</code>: the destination version</li> |
|
<li> |
|
<code>%O</code>: the ancestor version</li> |
|
<li> |
|
<code>%L</code>: the conflict marker size</li> |
|
</ul> |
|
|
|
<p>Note 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:</p> |
|
|
|
<p><code>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'\''' |
|
</code></p> |
|
|
|
<p>The exit status from the custom command should be zero on success or non-zero on |
|
conflicts or other failure.</p> |
|
|
|
<p>Note that if no merge driver is specified for the value of the <code>merge</code> attribute |
|
(as is the case by default with <code>merge=lfs</code>), 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.</p> |
|
|
|
<h2 id="SEE-ALSO">SEE ALSO</h2> |
|
|
|
<p><a class="man-ref" href="https://git-scm.com/docs/git-merge">git-merge<span class="s">(1)</span></a>, <a class="man-ref" href="https://git-scm.com/docs/git-merge-file">git-merge-file<span class="s">(1)</span></a>, <a class="man-ref" href="https://git-scm.com/docs/gitattributes">gitattributes<span class="s">(5)</span></a></p> |
|
|
|
<p>Part of the <a class="man-ref" href="git-lfs.1.html">git-lfs<span class="s">(1)</span></a> suite.</p> |
|
|
|
<ol class='man-decor man-foot man foot'> |
|
<li class='tl'></li> |
|
<li class='tc'>May 2022</li> |
|
<li class='tr'>git-lfs-merge-driver(1)</li> |
|
</ol> |
|
|
|
</div> |
|
</body> |
|
</html> |
|
|