2016-11-24 59 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)處理可能仍然是有利的。