????

Your IP : 216.73.216.152


Current Path : C:/Program Files/Git/mingw64/share/doc/git-doc/
Upload File :
Current File : C:/Program Files/Git/mingw64/share/doc/git-doc/git-lfs-migrate.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.23">
<title>git-lfs-migrate(1)</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
<style>
/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment the following line when using as a custom stylesheet */
/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
html{font-family:sans-serif;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
b,strong{font-weight:bold}
abbr{font-size:.9em}
abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
dfn{font-style:italic}
hr{height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type=checkbox],input[type=radio]{padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,::before,::after{box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ul.square{list-style-type:square}
ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre).nobreak{word-wrap:normal}
:not(pre).nowrap{white-space:nowrap}
:not(pre).pre-wrap{white-space:pre-wrap}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child{border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details{margin-left:1.25rem}
details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
details>summary::-webkit-details-marker{display:none}
details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child,.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
pre.pygments span.linenos{display:inline-block;margin-right:.75em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>*>tr>*{border-width:1px}
table.grid-cols>*>tr>*{border-width:0 1px}
table.grid-rows>*>tr>*{border-width:1px 0}
table.frame-all{border-width:1px}
table.frame-ends{border-width:1px 0}
table.frame-sides{border-width:0 1px}
table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
li>p:empty:only-child::before{content:"";display:inline-block}
ul.checklist>li>p:first-child{margin-left:-1em}
ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
td.hdlist2{word-wrap:anywhere}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active,#footnotes .footnote a:first-of-type:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]{border-bottom:1px dotted}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#header,#content,#footnotes,#footer{max-width:none}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
</style>
</head>
<body class="article">
<div id="header">
<h1>git-lfs-migrate(1)</h1>
</div>
<div id="content">
<div class="sect1">
<h2 id="_name">NAME</h2>
<div class="sectionbody">
<div class="paragraph">
<p>git-lfs-migrate - Migrate history to or from Git LFS</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_synopsis">SYNOPSIS</h2>
<div class="sectionbody">
<div class="paragraph">
<p><code>git lfs migrate</code> &lt;mode&gt; [options] [--] [branch &#8230;&#8203;]</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_description">DESCRIPTION</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Convert files in a Git repository to or from Git LFS pointers, or
summarize Git file sizes by file type. The <code>import</code> mode converts Git
files (i.e., blobs) to Git LFS, while the <code>export</code> mode does the
reverse, and the <code>info</code> mode provides an informational summary which may
be useful in deciding which files to import or export.</p>
</div>
<div class="paragraph">
<p>In all modes, by default <code>git lfs migrate</code> operates only on the
currently checked-out branch, and only on files (of any size and type)
added in commits which do not exist on any remote. Multiple options are
available to override these defaults.</p>
</div>
<div class="paragraph">
<p>When converting files to or from Git LFS, the <code>git lfs migrate</code> command
will only make changes to your local repository and working copy, never
any remotes. This is intentional as the <code>import</code> and <code>export</code> modes are
generally "destructive" in the sense that they rewrite your Git history,
changing commits and generating new commit SHAs. (The exception is the
"no-rewrite" <code>import</code> sub-mode; see <a href="#_import_without_rewriting_history">IMPORT WITHOUT REWRITING HISTORY</a>
for details.)</p>
</div>
<div class="paragraph">
<p>You should therefore always first commit or stash any uncommitted work
before using the <code>import</code> or <code>export</code> modes, and then validate the
result of the migration before pushing the changes to your remotes, for
instance by running the <code>info</code> mode and by examining your rewritten
commit history.</p>
</div>
<div class="paragraph">
<p>Once you are satisfied with the changes, you will need to force-push the
new Git history of any rewritten branches to all your remotes. This is a
step which should be taken with care, since you will be altering the Git
history on your remotes.</p>
</div>
<div class="paragraph">
<p>To examine or modify files in branches other than the currently
checked-out one, branch refs may be specified directly, or provided in
one or more <code>--include-ref</code> options. They may also be excluded by
prefixing them with <code>^</code> or providing them in <code>--exclude-ref</code> options.
Use the <code>--everything</code> option to specify that all refs should be
examined, including all remote refs. See <a href="#_include_and_exclude_references">INCLUDE AND EXCLUDE REFERENCES</a>
for details.</p>
</div>
<div class="paragraph">
<p>For the <code>info</code> and <code>import</code> modes, all file types are considered by
default; while useful in the <code>info</code> mode, this is often not desirable
when importing, so either filename patterns (pathspecs) or the <code>--fixup</code>
option should normally be specified in that case. (At least one include
pathspec is required for the <code>export</code> mode.) Pathspecs may be defined
using the <code>--include</code> and <code>--exclude</code> options (<code>-I</code> and <code>-X</code> for short),
as described in <a href="#_include_and_exclude">INCLUDE AND EXCLUDE</a>.</p>
</div>
<div class="paragraph">
<p>As typical Git LFS usage depends on tracking specific file types using
filename patterns defined in <code>.gitattributes</code> files, the
<code>git lfs migrate</code> command will examine, create, and modify
<code>.gitattributes</code> files as necessary. The <code>.gitattributes</code> files will
always be assigned the default read/write permissions mode (i.e.,
without execute permissions). Any symbolic links with that name will
cause the migration to halt prematurely.</p>
</div>
<div class="paragraph">
<p>The <code>import</code> mode (see <a href="#_import">IMPORT</a>) will convert Git objects of the file
types specified (e.g., with <code>--include</code>) to Git LFS pointers, and will
add entries for those file types to <code>.gitattributes</code> files, creating
those files if they do not exist. The result should be as if
<code>git lfs track</code> commands had been run at the points in your Git history
corresponding to where each type of converted file first appears. The
exception is if the <code>--fixup</code> option is given, in which case the
<code>import</code> mode will only examine any existing <code>.gitattributes</code> files and
then convert Git objects which should be tracked by Git LFS but are not
yet.</p>
</div>
<div class="paragraph">
<p>The <code>export</code> mode (see <a href="#_export">EXPORT</a>) works as the reverse operation to the
<code>import</code> mode, converting any Git LFS pointers that match the file types
specified with <code>--include</code>, which must be given at least once. Note that
<code>.gitattributes</code> entries will not be removed, nor will the files;
instead, the <code>export</code> mode inserts "do not track" entries similar to
those created by the <code>git lfs untrack</code> command. The <code>--remote</code> option is
available in the <code>export</code> mode to specify the remote from which Git LFS
objects should be fetched if they do not exist in the local Git LFS
object cache; if not provided, <code>origin</code> is used by default.</p>
</div>
<div class="paragraph">
<p>The <code>info</code> mode (see <a href="#_info">INFO</a>) summarizes by file type (i.e., by filename
extension) the total number and size of files in a repository. Note that
like the other two modes, by default the <code>info</code> mode operates only on
the currently checked-out branch and only on commits which do not exist
on any remote, so to get a summary of the entire repository across all
branches, use the <code>--everything</code> option. If objects have already been
converted to Git LFS pointers, then by default the size of the
referenced objects is totaled and reported separately. You may also
choose to ignore them by using <code>--pointers=ignore</code> or to treat the
pointers as files by using <code>--pointers=no-follow</code>. (The latter option is
akin to how existing Git LFS pointers were handled by the <code>info</code> mode in
prior versions of Git LFS).</p>
</div>
<div class="paragraph">
<p>When using the <code>--everything</code> option, take note that it means all commits
reachable from all refs (local and remote) will be considered, but not
necessarily all file types. The <code>import</code> and <code>info</code> modes consider all file
types by default, although the <code>--include</code> and <code>--exclude</code> options constrain
this behavior.</p>
</div>
<div class="paragraph">
<p>While the <code>--everything</code> option means all commits reachable from any
ref will be considered for migration, after migration only local refs will
be updated even when <code>--everything</code> is specified. This ensures remote
refs stay synchronized with their remote. In other words, <code>refs/heads/foo</code>
will be updated with the <code>--everything</code> option, but <code>refs/remotes/origin/foo</code>
will not, so it stays in sync with the remote until <code>git push origin foo</code>
is performed.  After checking that the results of a migration with
<code>--everything</code> are satisfactory, it may be convenient to push all local
branches to your remotes by using the <code>--all</code> option to <code>git push</code>.</p>
</div>
<div class="paragraph">
<p>Unless the <code>--skip-fetch</code> option is given, <code>git lfs migrate</code> always
begins by fetching updated lists of refs from all the remotes returned
by <code>git remote</code>, but as noted above, after making changes to your local
Git history while converting objects, it will never automatically push
those changes to your remotes.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_modes">MODES</h2>
<div class="sectionbody">
<div class="dlist">
<dl>
<dt class="hdlist1">info</dt>
<dd>
<p>Show information about repository size. See <a href="#_info">INFO</a>.</p>
</dd>
<dt class="hdlist1">import</dt>
<dd>
<p>Convert Git objects to Git LFS pointers. See <a href="#_import">IMPORT</a> and
<a href="#_import_without_rewriting_history">IMPORT WITHOUT REWRITING HISTORY</a></p>
</dd>
<dt class="hdlist1">export</dt>
<dd>
<p>Convert Git LFS pointers to Git objects. See <a href="#_export">EXPORT</a>.</p>
</dd>
</dl>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_options">OPTIONS</h2>
<div class="sectionbody">
<div class="dlist">
<dl>
<dt class="hdlist1"><code>-I &lt;paths&gt;</code></dt>
<dt class="hdlist1"><code>--include=&lt;paths&gt;</code></dt>
<dd>
<p>See <a href="#_include_and_exclude">INCLUDE AND EXCLUDE</a>.</p>
</dd>
<dt class="hdlist1"><code>-X &lt;paths&gt;</code></dt>
<dt class="hdlist1"><code>--exclude=&lt;paths&gt;</code></dt>
<dd>
<p>See <a href="#_include_and_exclude">INCLUDE AND EXCLUDE</a>.</p>
</dd>
<dt class="hdlist1"><code>--include-ref=&lt;refname&gt;</code></dt>
<dd>
<p>See <a href="#_include_and_exclude_references">INCLUDE AND EXCLUDE REFERENCES</a>.</p>
</dd>
<dt class="hdlist1"><code>--include-ref=&lt;refname&gt;</code></dt>
<dd>
<p>See <a href="#_include_and_exclude_references">INCLUDE AND EXCLUDE REFERENCES</a>.</p>
</dd>
<dt class="hdlist1"><code>--exclude-ref=&lt;refname&gt;</code></dt>
<dd>
<p>See <a href="#_include_and_exclude_references">INCLUDE AND EXCLUDE REFERENCES</a>.</p>
</dd>
<dt class="hdlist1"><code>--skip-fetch</code></dt>
<dd>
<p>  Assumes that the known set of remote references is complete, and should not be
  refreshed when determining the set of "un-pushed" commits to migrate. Has no
  effect when combined with
<code>--include-ref</code> or <code>--exclude-ref</code>.</p>
</dd>
<dt class="hdlist1"><code>--everything</code></dt>
<dd>
<p>See <a href="#_include_and_exclude_references">INCLUDE AND EXCLUDE REFERENCES</a>.</p>
<div class="paragraph">
<p>Note: Git refs are "case-sensitive" on all platforms in "packed from"
(see <code>git-pack-refs(1)</code>). On "case-insensitive" file systems, e.g. NTFS
on Windows or default APFS on macOS, <code>git-lfs-migrate(1)</code> would only
migrate the first ref if two or more refs are equal except for
upper/lower case letters.</p>
</div>
</dd>
<dt class="hdlist1"><code>--yes</code></dt>
<dd>
<p>Assume a yes answer to any prompts, permitting noninteractive use. Currently,
the only such prompt is the one asking whether to overwrite (destroy) any
working copy changes. Thus, specifying this option may cause data loss if you
are not careful.</p>
</dd>
<dt class="hdlist1"><code>[branch &#8230;&#8203;]</code></dt>
<dd>
<p>Migrate only the set of branches listed. If not given, <code>git-lfs-migrate(1)</code>
will migrate the currently checked out branch.</p>
<div class="paragraph">
<p>References beginning with <code>^</code> will be excluded, whereas branches that do
not begin with <code>^</code> will be included.</p>
</div>
<div class="paragraph">
<p>If any of <code>--include-ref</code> or <code>--exclude-ref</code> are given, the checked out
branch will not be appended, but branches given explicitly will be
appended.</p>
</div>
</dd>
</dl>
</div>
<div class="sect2">
<h3 id="_info">INFO</h3>
<div class="paragraph">
<p>The <code>info</code> mode summarizes the sizes of file objects present in the Git
history. It supports all the core <code>migrate</code> options and these additional
ones:</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1"><code>--above=&lt;size&gt;</code></dt>
<dd>
<p>Only count files whose individual filesize is above the given size. <code>size</code> may
be specified as a number of bytes, or a number followed by a storage unit,
e.g., "1b", "20 MB", "3 TiB", etc.</p>
<div class="paragraph">
<p>If a set of files sharing a common extension has no files in that set
whose individual size is above the given <code>--above</code> no files no entry for
that set will be shown.</p>
</div>
</dd>
<dt class="hdlist1"><code>--top=&lt;n&gt;</code></dt>
<dd>
<p>Only display the top <code>n</code> entries, ordered by how many total files match the
given pathspec. The default is to show only the top 5 entries. When existing
Git LFS objects are found, an extra, separate "LFS Objects" line is output in
addition to the top <code>n</code> entries, unless the <code>--pointers</code> option is used to
change this behavior.</p>
</dd>
<dt class="hdlist1"><code>--unit=&lt;unit&gt;</code></dt>
<dd>
<p>Format the number of bytes in each entry as a quantity of the storage unit
provided. Valid units include: * b, kib, mib, gib, tib, pib - for IEC storage
units * b, kb, mb, gb, tb, pb - for SI storage units</p>
<div class="paragraph">
<p>If a <code>--unit</code> is not specified, the largest unit that can fit the number
of counted bytes as a whole number quantity is chosen.</p>
</div>
</dd>
<dt class="hdlist1"><code>--pointers=[follow|no-follow|ignore]</code></dt>
<dd>
<p>Treat existing Git LFS pointers in the history according to one of three
alternatives. In the default <code>follow</code> case, if any pointers are found, an
additional separate "LFS Objects" line item is output which summarizes the
total number and size of the Git LFS objects referenced by pointers. In the
<code>ignore</code> case, any pointers are simply ignored, while the <code>no-follow</code> case
replicates the behavior of the <code>info</code> mode in older Git LFS versions and
treats any pointers it finds as if they were regular files, so the output
totals only include the contents of the pointers, not the contents of the
objects to which they refer.</p>
</dd>
<dt class="hdlist1"><code>--fixup</code></dt>
<dd>
<p>Infer <code>--include</code> and <code>--exclude</code> filters on a per-commit basis based on the
<code>.gitattributes</code> files in a repository. In practice, this option counts any
filepaths which should be tracked by Git LFS according to the repository&#8217;s
<code>.gitattributes</code> file(s), but aren&#8217;t already pointers. The <code>.gitattributes</code>
files are not reported, in contrast to the normal output of the <code>info</code> mode.
This option is incompatible with explicitly given <code>--include</code>, <code>--exclude</code>
filters and with any <code>--pointers</code> setting other than <code>ignore</code>, hence <code>--fixup</code>
implies <code>--pointers=ignore</code> if it is not explicitly set.</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p>The format of the output shows the filename pattern, the total size of
the file objects (excluding those below the <code>--above</code> threshold, if one
was defined), and the ratio of the number of files above the threshold
to the total number of files; this ratio is also shown as a percentage.
For example:</p>
</div>
<div class="literalblock">
<div class="content">
<pre>*.gif               93 MB   9480/10504 files(s)  90%
*.png               14 MB    1732/1877 files(s)  92%</pre>
</div>
</div>
<div class="paragraph">
<p>By default only the top five entries are shown, but <code>--top</code> allows for
more or fewer to be output as desired.</p>
</div>
</div>
<div class="sect2">
<h3 id="_import">IMPORT</h3>
<div class="paragraph">
<p>The <code>import</code> mode migrates objects present in the Git history to pointer
files tracked and stored with Git LFS. It supports all the core
<code>migrate</code> options and these additional ones:</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1"><code>--verbose</code></dt>
<dd>
<p>Print the commit oid and filename of migrated files to STDOUT.</p>
</dd>
<dt class="hdlist1"><code>--above=&lt;size&gt;</code></dt>
<dd>
<p>Only migrate files whose individual filesize is above the given size. <code>size</code>
may be specified as a number of bytes, or a number followed by a storage unit,
e.g., "1b", "20 MB", "3 TiB", etc. This option cannot be used with the
<code>--include</code>, <code>--exclude</code>, and <code>--fixup</code> options.</p>
</dd>
<dt class="hdlist1"><code>--object-map=&lt;path&gt;</code></dt>
<dd>
<p>Write to <code>path</code> a file with the mapping of each rewritten commits. The file
format is CSV with this pattern: <code>OLD-SHA</code>,<code>NEW-SHA</code></p>
</dd>
<dt class="hdlist1"><code>--no-rewrite</code></dt>
<dd>
<p>Migrate objects to Git LFS in a new commit without rewriting Git history.
Please note that when this option is used, the <code>migrate import</code> command will
expect a different argument list, specialized options will become available,
and the core <code>migrate</code> options will be ignored.
See <a href="#_import_without_rewriting_history">IMPORT WITHOUT REWRITING HISTORY</a>.</p>
</dd>
<dt class="hdlist1"><code>--fixup</code></dt>
<dd>
<p>Infer <code>--include</code> and <code>--exclude</code> filters on a per-commit basis based on the
<code>.gitattributes</code> files in a repository. In practice, this option imports any
filepaths which should be tracked by Git LFS according to the repository&#8217;s
<code>.gitattributes</code> file(s), but aren&#8217;t already pointers. This option is
incompatible with explicitly given <code>--include</code>, <code>--exclude</code> filters.</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p>If <code>--no-rewrite</code> is not provided and <code>--include</code> or <code>--exclude</code> (<code>-I</code>,
<code>-X</code>, respectively) are given, the <code>.gitattributes</code> will be modified to
include any new filepath patterns as given by those flags.</p>
</div>
<div class="paragraph">
<p>If <code>--no-rewrite</code> is not provided and neither of those flags are given,
the gitattributes will be incrementally modified to include new filepath
extensions as they are rewritten in history.</p>
</div>
</div>
<div class="sect2">
<h3 id="_import_without_rewriting_history">IMPORT WITHOUT REWRITING HISTORY</h3>
<div class="paragraph">
<p>The <code>import</code> mode has a special sub-mode enabled by the <code>--no-rewrite</code>
flag. This sub-mode will migrate objects to pointers as in the base
<code>import</code> mode, but will do so in a new commit without rewriting Git
history. When using this sub-mode, the base <code>migrate</code> options, such as
<code>--include-ref</code>, will be ignored, as will those for the base <code>import</code>
mode. The <code>migrate</code> command will also take a different argument list. As
a result of these changes, <code>--no-rewrite</code> will only operate on the
current branch - any other interested branches must have the generated
commit merged in.</p>
</div>
<div class="paragraph">
<p>The <code>--no-rewrite</code> sub-mode supports the following options and
arguments:</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1"><code>-m &lt;message&gt;</code></dt>
<dt class="hdlist1"><code>--message=&lt;message&gt;</code></dt>
<dd>
<p>Specifies a commit message for the newly created commit.</p>
</dd>
<dt class="hdlist1">[file &#8230;&#8203;]</dt>
<dd>
<p>The list of files to import. These files must be tracked by
patterns specified in the gitattributes.</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p>If <code>--message</code> is given, the new commit will be created with the
provided message. If no message is given, a commit message will be
generated based on the file arguments.</p>
</div>
</div>
<div class="sect2">
<h3 id="_export">EXPORT</h3>
<div class="paragraph">
<p>The <code>export</code> mode migrates Git LFS pointer files present in the Git
history out of Git LFS, converting them into their corresponding object
files. It supports all the core <code>migrate</code> options and these additional
ones:</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1"><code>--verbose</code></dt>
<dd>
<p>Print the commit oid and filename of migrated files to
STDOUT.</p>
</dd>
<dt class="hdlist1"><code>--object-map=&lt;path&gt;</code></dt>
<dd>
<p>Write to <code>path</code> a file with the mapping of each rewritten commit. The file
format is CSV with this pattern: <code>OLD-SHA</code>,<code>NEW-SHA</code></p>
</dd>
<dt class="hdlist1"><code>--remote=&lt;git-remote&gt;</code></dt>
<dd>
<p>Download LFS objects from the provided <code>git-remote</code> during the export. If not
provided, defaults to <code>origin</code>.</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p>The <code>export</code> mode requires at minimum a pattern provided with the
<code>--include</code> argument to specify which files to export. Files matching
the <code>--include</code> patterns will be removed from Git LFS, while files
matching the <code>--exclude</code> patterns will retain their Git LFS status. The
export command will modify the <code>.gitattributes</code> to set/unset any
filepath patterns as given by those flags.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_include_and_exclude">INCLUDE AND EXCLUDE</h2>
<div class="sectionbody">
<div class="paragraph">
<p>You can specify that <code>git lfs migrate</code> should only convert files whose
pathspec matches the <code>--include</code> glob patterns and does not match the
<code>--exclude</code> glob patterns, either to reduce total migration time or to
only migrate part of your repo. Multiple patterns may be given using
commas as delimiters.</p>
</div>
<div class="paragraph">
<p>Pattern matching is done so as to be functionally equivalent to the
pattern matching format of <code>.gitattributes</code>. In addition to simple file
extension matches (e.g., <code><strong>.gif</code>) patterns may also specify directory
paths, in which case the <code>path/</strong>*</code> format may be used to match
recursively.</p>
</div>
<div class="paragraph">
<p>Note that this form of pattern matching for the <code>--include</code> and
<code>--exclude</code> options used by the <code>git lfs migrate</code> command is unique
among the suite of <code>git lfs</code> commands. Other commands which also take
these options, such as <code>git lfs ls-files</code>, use the gitignore(5) form of
pattern matching instead.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_include_and_exclude_references">INCLUDE AND EXCLUDE REFERENCES</h2>
<div class="sectionbody">
<div class="paragraph">
<p>You can specify that <code>git lfs migrate</code> should only convert files added
in commits reachable from certain references, namely those defined using
one or more <code>--include-ref</code> options, and should ignore files in commits
reachable from references defined in <code>--exclude-ref</code> options.</p>
</div>
<div class="literalblock">
<div class="content">
<pre>        D---E---F
       /         \
  A---B------C    refs/heads/my-feature
   \          \
    \          refs/heads/main
     \
      refs/remotes/origin/main</pre>
</div>
</div>
<div class="paragraph">
<p>In the above configuration, the following commits are reachable by each
ref:</p>
</div>
<div class="literalblock">
<div class="content">
<pre>refs/heads/main:           C, B, A
refs/heads/my-feature:     F, E, D, B, A
refs/remote/origin/main:   A</pre>
</div>
</div>
<div class="paragraph">
<p>The following <code>git lfs migrate</code> options would, therefore, include
commits F, E, D, C, and B, but exclude commit A:</p>
</div>
<div class="literalblock">
<div class="content">
<pre>  --include-ref=refs/heads/my-feature
  --include-ref=refs/heads/main
  --exclude-ref=refs/remotes/origin/main</pre>
</div>
</div>
<div class="paragraph">
<p>The presence of flag <code>--everything</code> indicates that all commits reachable
from all local and remote references should be migrated (but note that
the remote refs themselves will not be updated).</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_examples">EXAMPLES</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_migrate_unpushed_commits">Migrate unpushed commits</h3>
<div class="paragraph">
<p>A common use case for the migrate command is to convert large Git
objects to LFS before pushing your commits. By default, it only scans
commits that don&#8217;t exist on any remote, so long as the repository is
non-bare.</p>
</div>
<div class="paragraph">
<p>First, run <code>git lfs migrate info</code> to list the file types taking up the
most space in your repository:</p>
</div>
<div class="literalblock">
<div class="content">
<pre>$ git lfs migrate info
migrate: Fetching remote refs: ..., done
migrate: Sorting commits: ..., done
migrate: Examining commits: 100% (1/1), done
*.mp3   284 MB    1/1 files(s)  100%
*.pdf   42 MB     8/8 files(s)  100%
*.psd   9.8 MB  15/15 files(s)  100%
*.ipynb 6.9 MB    6/6 files(s)  100%
*.csv   5.8 MB    2/2 files(s)  100%</pre>
</div>
</div>
<div class="paragraph">
<p>Now, you can run <code>git lfs migrate import</code> to convert some file types to
LFS:</p>
</div>
<div class="literalblock">
<div class="content">
<pre>$ git lfs migrate import --include="*.mp3,*.psd"
migrate: Fetching remote refs: ..., done
migrate: Sorting commits: ..., done
migrate: Rewriting commits: 100% (1/1), done
  main  d2b959babd099fe70da1c1512e2475e8a24de163 -&gt; 136e706bf1ae79643915c134e17a6c933fd53c61
migrate: Updating refs: ..., done</pre>
</div>
</div>
<div class="paragraph">
<p>If after conversion you find that some files in your working directory
have been replaced with Git LFS pointers, this is normal, and the
working copies of these files can be repopulated with their full
expected contents by using <code>git lfs checkout</code>.</p>
</div>
</div>
<div class="sect2">
<h3 id="_migrate_local_history">Migrate local history</h3>
<div class="paragraph">
<p>You can also migrate the entire history of your repository:</p>
</div>
<div class="literalblock">
<div class="content">
<pre># Check for large files and existing Git LFS objects in your local main branch
$ git lfs migrate info --include-ref=main

# Check for large files and existing Git LFS objects in every branch
$ git lfs migrate info --everything

# Check for large files in every branch, ignoring any existing Git LFS objects,
# and listing the top 100 or fewer results
$ git lfs migrate info --everything --pointers=ignore --top=100</pre>
</div>
</div>
<div class="paragraph">
<p>The same flags will work in <code>import</code> mode:</p>
</div>
<div class="literalblock">
<div class="content">
<pre># Convert all zip files in your main branch
$ git lfs migrate import --include-ref=main --include="*.zip"

# Convert all zip files in every local branch
$ git lfs migrate import --everything --include="*.zip"

# Convert all files over 100K in every local branch
$ git lfs migrate import --everything --above=100Kb</pre>
</div>
</div>
<div class="paragraph">
<p>Note: This will require a force-push to any existing Git remotes. Using
the <code>--all</code> option when force-pushing may be convenient if many local refs
were updated, e.g., after importing to Git LFS with the <code>--everything</code>
option.</p>
</div>
</div>
<div class="sect2">
<h3 id="_migrate_without_rewriting_local_history">Migrate without rewriting local history</h3>
<div class="paragraph">
<p>You can also migrate files without modifying the existing history of
your repository. Note that in the examples below, files in
subdirectories are not included because they are not explicitly
specified.</p>
</div>
<div class="paragraph">
<p>Without a specified commit message:</p>
</div>
<div class="literalblock">
<div class="content">
<pre>$ git lfs migrate import --no-rewrite test.zip *.mp3 *.psd</pre>
</div>
</div>
<div class="paragraph">
<p>With a specified commit message:</p>
</div>
<div class="literalblock">
<div class="content">
<pre>$ git lfs migrate import --no-rewrite \
  -m "Import test.zip, .mp3, .psd files in root of repo" \
  test.zip *.mp3 *.psd</pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_migrate_from_git_lfs">Migrate from Git LFS</h3>
<div class="paragraph">
<p>If you no longer wish to use Git LFS for some or all of your files, you can
use the <code>export</code> mode to convert Git LFS objects into regular Git blobs again.</p>
</div>
<div class="paragraph">
<p>The <code>export</code> mode requires at least one <code>--include</code> pathspec, and will
download any objects not found locally from your <code>origin</code> Git remote, or
from the Git remote you specify with the <code>--remote</code> option.</p>
</div>
<div class="literalblock">
<div class="content">
<pre># Convert all zip Git LFS objects to files in your main branch
$ git lfs migrate export --include-ref=main --include="*.zip"

# Convert all zip Git LFS objects to files in every local branch,
# fetching any object data not cached locally from the my-remote Git remote
$ git lfs migrate export --everything --include="*.zip" --remote=my-remote

# Convert all Git LFS objects to files in every local branch
$ git lfs migrate export --everything --include="*"</pre>
</div>
</div>
<div class="paragraph">
<p>Note: This will require a force-push to any existing Git remotes. Using
the <code>--all</code> option when force-pushing may be convenient if many local refs
were updated, e.g., after exporting from Git LFS with the <code>--everything</code>
option.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_see_also">SEE ALSO</h2>
<div class="sectionbody">
<div class="paragraph">
<p>git-lfs-checkout(1), git-lfs-ls-files(1), git-lfs-track(1),
git-lfs-untrack(1), gitattributes(5), gitignore(5).</p>
</div>
<div class="paragraph">
<p>Part of the git-lfs(1) suite.</p>
</div>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
</div>
</div>
</body>
</html>