2016-11-24 82 views
0

我有一个存储库,我想添加大型文本数据文件。由于它们的数量和大小(在某些情况下可能高达大约100MB),我想用git-lfs跟踪这些文件。如何使用git-lfs跟踪适当的行尾标准化的文本文件?

我已经添加这样的文件与git lfs track data.txt,并在.gitattributes文件更改缺省-text(指定的二进制文件)到text=auto(如在git-scm's gitattributes documentation记载)。这给了我一个.gitattributes看起来像:

data.txt filter=lfs diff=lfs merge=lfs text=auto 

而只是要确定,我有refreshed the repository。即使如此,文件似乎仍然作为二进制对象进行跟踪,相应地,行结束转换过滤器不适用于结帐(即,文件正在检出并检查其原始行尾)在)。

我也尝试过text=crlf(和变体text eol=crlf),结果相同。我已经看到了一些文件和教程有关使用git-lfs,但他们似乎都对跟踪的二进制文件进行减速(如*.binimagesaudio files ...)

有没有一种方法,使跟踪的文件一个大的文本文件(并且将常规文本文件的行尾标准化)与git-lfs

我目前使用git-lfs 1.5.2和git在Windows 7平台上的Windows 2.10.2(64位版本),配置为core.autocrlf=true

回答

1

git-scm's gitattributes一些更多的阅读和一些修修补补之后,我能够通过定义自定义过滤器基于git-lfs自己的过滤器(这是我在~/.gitconfig发现),并利用Jonathan Leffler的的unix-to-dos conversion with sed来实现这一功能:

[filter "textlfs"] 
    clean = sed $'s/$/\\r/' %f | git-lfs clean 
    smudge = git-lfs smudge -- %f | sed $'s/\\r$//' 
    required = true 

然后可以用于跟踪大型文本文件在Windows机器上有.gitattributes条目:

data.txt filter=textlfs diff=textlfs merge=textlfs 

这^ h任何强制存储库用户都可以包含此自定义过滤器定义。为方便起见,您可能需要include it in a custom .gitconfig in your repository(请注意,这需要用户手动将定义与git config --local include.path ../.gitconfig一起包含)。这应该适用于Windows平台上的用户,但不适用于具有不同行结尾的平台上的用户(例如Linux和Mac)。更复杂的过滤器,可以构造使用类似的处理不同的平台:

[filter "textlfs"] 
    clean = (if [ `uname -s` == "Linux" ]; then cat %f; else sed $'s/$/\\r/' %f; fi) | git-lfs clean 
    smudge = git-lfs smudge -- %f | (if [ `uname -s` == "Linux" ]; then cat; else sed $'s/\\r$//'; fi) 
    required = true 

最后,请记住,除非你的大文本文件通常更新之间显著改变或他们都这么大了,他们超过了文件大小限制( such as GitHub's),因为git can efficiently pack text files,将这些文本文件作为标准文本文件(即,没有git-lfs)处理可能仍然是有利的。