2015-12-21 45 views
6

我剛剛爲一個項目設置了Git LFS,對於非圖像文件(例如預編譯的庫),它工作得很好。但是,即使我嘗試重置(git checkout --)它們,所有.png和.jpg文件都顯示爲始終被修改。Git LFS總是顯示已更改的圖像文件?

的條目看起來都一樣在.gitattributes

*.jpg filter=lfs diff=lfs merge=lfs -text 
*.png filter=lfs diff=lfs merge=lfs -text 
*.so filter=lfs diff=lfs merge=lfs -text 

git diff輸出並不十分有用:

diff --git a/Design/faviconit/favicon.ico b/Design/faviconit/favicon.ico 
index 3202014..b5d3daf 100755 
Binary files a/Design/faviconit/favicon.ico and b/Design/faviconit/favicon.ico differ 

我不知道我應該採取哪些步驟來診斷問題。有沒有其他人遇到過這個問題?有任何想法嗎?謝謝!

更新:

它實際上不是所有圖像文件,只是其中的一個子集。但只有圖像文件顯示問題。

我試着刪除所有有問題的圖片並推送提交。然後在另一臺機器上,我添加了一些文件並再次推送。當我拉出新的更改時,我遇到了同樣的問題:文件立即顯示爲已修改。這些文件在磁盤上看起來是正確的,並且實際上與原始文件相同。

+0

您是否在將文件添加到存儲庫之前或添加之後設置了git-lfs? –

+0

我相信在設置LFS之前,所有這些文件都在存儲庫中。 – starkos

+0

實際上,不,我已經回去查看歷史記錄,並在設置LFS後添加了一些文件。 – starkos

回答

5

D'oh ...經過多次檢查和檢查,並從網絡上的各種機器上推拉,我們發現其中git lfs install尚未在本地工作副本上運行。所以它推送原始二進制文件而不是LFS文本記錄。要修復它,我們必須運行init命令,然後提交併推送所有破損的文件(在驗證了我們已經執行了LFS文本記錄而不是圖像本身之後)。

希望LFS可以在某些時候捆綁到Git分發中並避免此問題。

0

我有一個LFS跟蹤文件總是顯示差異的類似症狀。在我的情況下,文件存儲在LFS中,但緩存中的文件似乎已損壞。如果您查看.git/lfs/objects/,則數據文件由sha256存儲。如果你在一個文件上運行sha256sum,它應該和它的名字相同,在我的情況下它們是不同的。

可以通過運行解決這個問題: git lfs fsck

例如

$ git lfs fsck 
Object MYPROBLEMFILE.data (9a963908a9b92d8c955dadbdb191d4d43f22d2a4c0e8dfadf1ce7c265d521f0b) is corrupt 
    moved to .git/XXX/lfs/bad/9a963908a9b92d8c955dadbdb191d4d43f22d2a4c0e8dfadf1ce7c265d521f0b 
$ git checkout master --force 
Already on 'master' 
Your branch is up-to-date with 'origin/master'. 
$ git lfs fsck 
Object MYPROBLEMFILE.data (9a963908a9b92d8c955dadbdb191d4d43f22d2a4c0e8dfadf1ce7c265d521f0b) could not be checked: no such file or directory 
$ git lfs pull 
Git LFS: (1 of 602 files) 33.72 MB/74.49 MB     
$ git lfs fsck 
Git LFS fsck OK