如何使用git lfs跟踪具有正确行尾规范化的文本文件?
我有一个存储库,我想向其中添加大型文本数据文件。由于它们的数量和大小(在某些情况下可能高达100MB),我想使用如何使用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 当然,我有。即使如此,文件似
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