[Git] git checkout 時出現 Encountered 1 file that should have been a pointer, but wasn’t 的錯誤訊息

[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 的問題囉~^^

 

(本頁面已被瀏覽過 111 次)

發佈留言

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

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