[Git] git checkout 時出現 Encountered 1 file that should have been a pointer, but wasn’t 的錯誤訊息
今天在 git checkout 一個 repo 時,
出現了一個 Encountered 1 file that should have been a pointer, but wasn’t 的錯誤訊息:
$ git checkout terraform/modules/bitnami_common/v2/common-2.6.0.tgz Updated 1 path from the index Encountered 1 file that should have been a pointer, but wasn't: terraform/modules/bitnami_common/v2/common-2.6.0.tgz
試了幾次都一樣…
上網查了一下,沒想到查到了自己之前寫的這篇,
裡面提到了是 Git LFS 管理的副檔名,但上傳的時候不是 Git LFS 格式,
猜測是有同事沒有安裝 Git LFS,所以上傳時的檔案格式不對~
(感謝過去的自己 XD…)
一樣先來檢查一下 .gitattributes 裡的設定,
可以看到我們預期讓 Git LFS 管理所有的 *.tgz 檔案:
$ cat .gitattributes *.zip filter=lfs diff=lfs merge=lfs -text *.tar filter=lfs diff=lfs merge=lfs -text *.gz filter=lfs diff=lfs merge=lfs -text *.bz2 filter=lfs diff=lfs merge=lfs -text *.tgz filter=lfs diff=lfs merge=lfs -text *.rpm filter=lfs diff=lfs merge=lfs -text *.deb filter=lfs diff=lfs merge=lfs -text *.so filter=lfs diff=lfs merge=lfs -text
接著用 git lfs ls-files
檢查一下 Git LFS 目前管理的檔案,
看到它有 common-2.2.4.tgz,但沒看到出問題的 common-2.6.0.tgz,
原因應該就如前面所述,在沒有安裝 Git LFS 的情況下,直接上傳了檔案:
$ git lfs ls-files 84b8c0d3cd * terraform/modules/bitnami_common/v2/common-2.2.4.tgz
修正的方法在舊的網誌文章有寫,
不過因為這次只有一個檔案有問題,所以我稍微改變一下做法。
直接 git lfs track
出問題的那個檔案:
$ git lfs track terraform/modules/bitnami_common/v2/common-2.6.0.tgz Tracking "terraform/modules/bitnami_common/v2/common-2.6.0.tgz"
這樣做的話,Git LFS 就會將格式修正成正確的,
但它同時也會把這個 terraform/modules/bitnami_common/v2/common-2.6.0.tgz 路徑,
直接加到 .gitattributes 裡面:
$ cat .gitattributes *.zip filter=lfs diff=lfs merge=lfs -text *.tar filter=lfs diff=lfs merge=lfs -text *.gz filter=lfs diff=lfs merge=lfs -text *.bz2 filter=lfs diff=lfs merge=lfs -text *.tgz filter=lfs diff=lfs merge=lfs -text *.rpm filter=lfs diff=lfs merge=lfs -text *.deb filter=lfs diff=lfs merge=lfs -text *.so filter=lfs diff=lfs merge=lfs -text terraform/modules/bitnami_common/v2/common-2.6.0.tgz filter=lfs diff=lfs merge=lfs -text
所以目前有兩個檔案被改變了:
$ git status On branch bug/fix-git-lfs Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: .gitattributes modified: terraform/modules/bitnami_common/v2/common-2.6.0.tgz
但這個 .gitattributes 改變我們不需要,可以直接取回舊的 .gitattributes 就好:
git checkout .gitattributes
接著把改變過的 common-2.6.0.tgz 用 git commit
和 git push
重新上傳。
完成之後,再試試 git checkout
,已經沒有問題了:
$ git checkout . Updated 0 paths from the index
用 git lfs ls-files
再次檢查,
common-2.6.0.tgz 也已經在 Git LFS 的管理範圍內:
$ git lfs ls-files 64fb3a16f6 * terraform/modules/bitnami_common/v2/common-2.6.0.tgz 84b8c0d3cd * terraform/modules/bitnami_common/v2/common-2.2.4.tgz
這樣子就修正好 Git LFS 的問題囉~^^