File size: 7,741 Bytes
c592385
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
<!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'>
  /* style: man */
  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>
<!--
  The following styles are deprecated and will be removed at some point:
  div#man, div#man ol.man, div#man ol.head, div#man ol.man.

  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
  .man-navigation should be used instead.
-->
<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 &gt;%%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>