我有一個使用 git lfs 的檔案,但即使我沒有做任何事情,它也會在 git 上顯示為有更改。我無法放棄這些更改,無論是通過 VS Code UI、git reset 還是 git restore。
Git 一直告訴我“遇到 1 個應該是指標的檔案,但不是:”
我知道Git 錯誤中的執行緒:Encountered 7 file(s) that should have been pointers, but were not,但我已經嘗試了那里的所有解決方案,但沒有一個有幫助。
uj5u.com熱心網友回復:
這是 Git 的一個限制,因為有人提交了一個由 Git LFS 跟蹤的檔案,而沒有使用 Git LFS。Git FAQ簡要提到了這一點。
這是因為當作業樹中的檔案被標記為已修改時,Git 會通過 clean 過濾器(即 Git LFS)運行它以查看它是否已更改。發生這種情況時,Git LFS 會將其轉換為指標檔案,但索引中的檔案是完整的 Git 檔案,因此將其標記為已修改。嘗試使用git reset --hard不會改變任何事情,因為 Git 仍然將它寫入樹并要求 Git LFS 以同樣的方式清理它,所以沒有任何改變。
Git LFS 無法控制這種行為,也無法檢測到它,因為 Git 沒有提供一種方法來指示用戶是否正在運行git reset --hard。使用其他干凈的作業樹,您需要運行git add --renormalize .并提交。在那之后,該檔案將被轉換為 LFS 檔案,并且不會再發生這種情況。請注意,進行此更改的提交必須出現在每個受影響的分支上才能修復它。
如果您設定了 CI,您可以使用 Git LFS 3.0.1 或更高版本運行git lfs fsck --pointers以檢查所有檔案是否都是正確的 LFS 檔案并拒絕任何失敗的提交。您可以查看手冊頁了解更多詳細資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/431872.html
