[Git] git clone 時出現 Encountered xx file(s) that should have been pointers, but weren’t 的錯誤訊息

[Git] git clone 時出現 Encountered xx file(s) that should have been pointers, but weren’t 的錯誤訊息

今天用 git clone 複製一個儲存庫 (repo) 時,

出現了 Encountered 26 file(s) that should have been pointers, but weren’t 的訊息:

$ git clone https://github.com/test/VirtualBox-1.0.git

Cloning into 'VirtualBox-1.0'...
remote: Enumerating objects: 1604, done.
remote: Total 1604 (delta 0), reused 0 (delta 0), pack-reused 1604
Receiving objects: 100% (1604/1604), 4.14 GiB | 10.63 MiB/s, done.
Resolving deltas: 100% (943/943), done.
Updating files: 100% (160/160), done.
Filtering content: 100% (6/6), 923.32 MiB | 10.32 MiB/s, done.
Encountered 26 file(s) that should have been pointers, but weren't:
    VirtualBox-4.3.14.tar.bz2
    VirtualBox-4.3.16.tar.bz2
    ......
    VirtualBox-6.0.8.tar.bz2

 

這種錯誤訊息之前也看過,基本上就是 Git LFS 沒有設定好,

通常有下面兩種可能:

  1. 在已經設定 Git LFS 的儲存庫,有人沒有安裝 Git LFS 套件,直接把原檔上傳,導致新上傳的檔案沒有正確的 Git LFS 連結
  2. 在沒有設定 Git LFS 的儲存庫,有人直接修改 .gitattributes,導致已在儲存庫的檔案沒有正確的 Git LFS 連結

 

如果不把它修好的話,每次 git clone 都會遇到這個錯誤,有點麻煩…

要怎麼修正呢?

 

先看一下 .gitattributes 檔案,

這裡面列了 Git LFS 目前管理的檔案類型,

像下例中目前是追蹤了 *.tar.bz2:

*.tar.bz2 filter=lfs diff=lfs merge=lfs -text

 

用  git lfs ls-files 指令看一下 Git LFS 管理的檔案,

結果只有 4 個,其他一堆 .tar.bz2 都不在裡面,

難怪 git clone 時會有一堆錯誤:

$ git lfs ls-files

603ec8bb8d - VirtualBox-6.0.24.tar.bz2
49c1990da1 - VirtualBox-6.1.16.tar.bz2
99816d2a15 - VirtualBox-6.1.22.tar.bz2
0212602eea - VirtualBox-6.1.26.tar.bz2

 

修正的其中一種方法,

是先刪掉 .gitattributes,讓 Git LFS 不要追蹤任何檔案。

反正現在已經抓下來的檔案,應該都是正確的原檔:

git rm .gitattributes
git commit -m "Remove .gitattributes to fix git lfs issue"

 

接著用  git lfs track 指令,來設定 Git LFS 要管理的檔案。

這個指令的好處是它會把儲存庫中符合的檔案,

也修改成 Git LFS 所需的格式,而直接修改 .gitattributes 就沒有這個好處。

設定好後,應該會有一堆檔案變成已修改 (modified),

這時就可以下  git commit 指令:

git lfs track "*.tar.bz2"
git commit -m "Re-track *.tar.bz2 in git lfs"

 

再下一次  git lfs ls-files 指令,

可以看到所有的 .tar.bz2 確實都在 Git LFS 管理中:

$ git lfs ls-files

bc893adde4 - VirtualBox-4.3.14.tar.bz2
99c32e646d - VirtualBox-4.3.16.tar.bz2
9798acbc78 - VirtualBox-4.3.18.tar.bz2
......
603ec8bb8d - VirtualBox-6.0.24.tar.bz2
49c1990da1 - VirtualBox-6.1.16.tar.bz2
99816d2a15 - VirtualBox-6.1.22.tar.bz2
0212602eea - VirtualBox-6.1.26.tar.bz2

 

都確認沒問題後,就可以再推回遠端儲存庫了:

git push

 

這樣之後下  git clone 應該就不會再遇到問題囉~^^

 

參考資料:git lfs – Git error: Encountered 7 file(s) that should have been pointers, but weren’t

(本頁面已被瀏覽過 3,021 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料