如何使用git lfs跟踪具有正确行尾规范化的文本文件?

如何使用git lfs跟踪具有正确行尾规范化的文本文件?,git,gitattributes,git-lfs,Git,Gitattributes,Git Lfs,我有一个存储库,我想向其中添加大型文本数据文件。由于它们的数量和大小(在某些情况下可能高达100MB),我想使用git lfs跟踪这些文件 我用git lfs track data.txt添加了这样一个文件,并将.gittributes文件中的默认-text(指定了一个二进制文件)更改为text=auto(如中所述)。这给了我一个.gittributes,它看起来像: data.txt filter=lfs diff=lfs merge=lfs text=auto 当然,我有。即使如此,文件似

我有一个存储库,我想向其中添加大型文本数据文件。由于它们的数量和大小(在某些情况下可能高达100MB),我想使用
git lfs
跟踪这些文件

我用
git lfs track data.txt
添加了这样一个文件,并将
.gittributes
文件中的默认
-text
(指定了一个二进制文件)更改为
text=auto
(如中所述)。这给了我一个
.gittributes
,它看起来像:

data.txt filter=lfs diff=lfs merge=lfs text=auto
当然,我有。即使如此,文件似乎仍然作为二进制对象进行跟踪,相应地,在签出时未应用行结束转换过滤器(即,文件将使用签入时使用的原始行结束符进行签出)

我还尝试了
text=crlf
(以及变量
text-eol=crlf
)并获得了相同的结果。我已经看过很多关于使用
git-lfs
的文档和教程,但它们似乎都是针对跟踪二进制文件的(例如,,…)

是否有一种方法可以使用
git lfs
,将文件作为大型文本文件进行跟踪(并使行尾标准化为常规文本文件)


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

在进一步阅读和修改之后,我能够通过基于
git lfs
自己的过滤器(我在
~/.gitconfig
中找到)定义一个自定义过滤器并使用以下各项来实现此功能:

然后可以使用
.gittributes
条目跟踪Windows计算机上的大型文本文件,例如:

data.txt filter=textlfs diff=textlfs merge=textlfs
但是,这会强制存储库用户包含此自定义筛选器定义。为方便起见,您可以(请注意,这需要用户使用
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
最后,请记住,除非您的大型文本文件通常在更新之间发生显著变化,或者它们太大以至于超出了文件大小限制(),否则将这些文本文件作为标准文本文件处理(即,不使用
git lfs
)仍然是有利的

[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