如何清理回购,如果阶段性文件标记为修改?

git reset --hard

我得到

Encountered 7 file(s) that should have been pointers, but weren't:

运行git clean -fdx也没有帮助。


当前回答

导致此错误的一个可能原因是git lfs对.gitattributes的相关更改影响了repo中已经添加的文件。

(我不确定复制的确切步骤,但问题似乎发生在我接触到一个文件时,该文件最近受到.git属性的影响,该文件以前被提交为非LFS文件,现在应该是LFS文件。切换分支似乎加剧了这个问题,或者至少在问题解决之前不可能切换分支。)

在本例中,我使用下面的步骤来防止此错误重复发生。


通过遵循这里的其他答案之一来修复您所在分支的问题(例如,清除缓存和重置。我发现BheeMa的答案很有效。) 转到你的主分支,确保git状态下没有什么要提交的 强制git重新检查并“重新应用”git属性更改

从Ratata Tata的回答如何改变。gitattributes生效)

 git rm --cached -r .
 git add -A

警告:确保在第2步中没有任何东西要提交,因为上面的步骤将添加以前没有版本的任何文件

Verify the results with git status (it should only have modified relevant files to become LFS pointers, i.e. files that can potentially cause the "encountered files that should have been pointers" error) and commit changes (Optionally, merge/rebase this fix to all other branches if possible. Otherwise, this error could pop up again when switching to those branches. Note that it may be necessary to repeat the initial fix for each branch as per step 1 to be safe, though it could be ok just to commit the affected files.)

其他回答

我有这个确切的错误与一些文件存储与git-LFS和解决它的方式一样,我已经解决了一个linending诱导borked索引。

清除缓存并进行硬复位:

git rm --cached -r .
git reset --hard

对于我来说,这比一个新鲜的克隆要快得多,因为我的repo中有巨大的git-LFS文件。

在这个问题上有多个步骤来解决。

如果你只是处于一个破碎的状态,就像卡在一个分支上,因为你不能重置/丢弃对问题文件的更改:删除.gitattributes文件可能足以让你进行下一次git移动。一旦你移动了你的git,你可能需要恢复.gitattributes文件,但至少你摆脱了困境。

我希望我在尝试上述所有方法之前就知道这一点。至少尝试一下是一个低风险的选择。

导致此错误的一个可能原因是git lfs对.gitattributes的相关更改影响了repo中已经添加的文件。

(我不确定复制的确切步骤,但问题似乎发生在我接触到一个文件时,该文件最近受到.git属性的影响,该文件以前被提交为非LFS文件,现在应该是LFS文件。切换分支似乎加剧了这个问题,或者至少在问题解决之前不可能切换分支。)

在本例中,我使用下面的步骤来防止此错误重复发生。


通过遵循这里的其他答案之一来修复您所在分支的问题(例如,清除缓存和重置。我发现BheeMa的答案很有效。) 转到你的主分支,确保git状态下没有什么要提交的 强制git重新检查并“重新应用”git属性更改

从Ratata Tata的回答如何改变。gitattributes生效)

 git rm --cached -r .
 git add -A

警告:确保在第2步中没有任何东西要提交,因为上面的步骤将添加以前没有版本的任何文件

Verify the results with git status (it should only have modified relevant files to become LFS pointers, i.e. files that can potentially cause the "encountered files that should have been pointers" error) and commit changes (Optionally, merge/rebase this fix to all other branches if possible. Otherwise, this error could pop up again when switching to those branches. Note that it may be necessary to repeat the initial fix for each branch as per step 1 to be safe, though it could be ok just to commit the affected files.)

上面的命令对我都没用,我在这里找到了答案

git status -s | cut -c 4- | xargs git update-index --assume-unchanged
rm .git/index && git reset

问题来自于git LFS在.git属性中标记为要跟踪的文件类型与一些已经在传统的非LFS版本控制下的匹配文件之间的不匹配。

所以这里最简单的解决方法是暂时删除.gitattributes文件:

git rm .gitattributes
git reset .
git checkout .

之后,您可以结帐任何其他分支。

另外一个建议:当添加一个新的文件类型到git LFS时,最好不要手动修改.gitattributes,而是通过运行:

git lfs track PATTERN

其中PATTERN是匹配文件的模式,例如*.so

通过这种方式,所有匹配新的跟踪模式的非LFS版本文件将被标记为dirty,并可以简单地添加,即转换为git LFS(文件指针)。