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

git reset --hard

我得到

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

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


当前回答

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

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

其他回答

在我的例子中,它是一个lfs规则下的文件(我假设它是在没有安装lfs或其他东西的情况下检入的)。

所以我在.gitattributes文件中找到了它的扩展名,并将这一行注释为

#*.7z filter=lfs diff=lfs merge=lfs -text

保存这个.git属性,然后git状态显示没有问题。

之后,我取消了这一行的注释(删除了#),保存了.gitattributes和git状态仍然显示没有问题。

分析

这是因为LFS没有跟踪这些文件,但是它们符合一些.gitattributes文件的描述。

例如,

服务器/ .gitattributes:

conf/** filter=lfs diff=lfs merge=lfs -text

server/conf/client.conf文件太大,被LFS跟踪 服务器/ conf /客户端。gflags是在git而不是LFS中跟踪的

然而,客户端。Gflags匹配服务器/。git会从LFS中拉出它,但是它没有LFS信息,错误就会被抛出。

解决方案

找到描述与encounter文件相匹配的.gitattributes文件,删除错误的描述或优化一些通配符匹配。

优化上面的例子, 服务器/ .gitattributes:

conf/client.conf filter=lfs diff=lfs merge=lfs -text

导致此错误的一个可能原因是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。

你可能会遇到这种情况,如果:

文件包含在common-base-branch中,而不是LFS中 在基于common-base-branch的分支LFS -branch中,文件被移动到LFS 在另一个同样基于common-base-branch的非lfs-branch分支中,修改了文件。

或者:

文件不包含在common-base-branch中 在基于common-base-branch的分支LFS -branch中,文件被添加到LFS 在另一个同样基于common-base-branch的非LFS -branch分支中,文件被添加(但不是添加到LFS。

在这两种情况下,当您尝试将非lfs-branch合并到lfs-branch时,都会得到这种错误。

您可能会问,为什么会出现这种情况,但答案是,许多软件是由不止一个人开发的(这就是为什么会有像GIT这样的版本控制系统),而且人们并不总是彼此交谈,或者LFS是后来在一个特性分支的项目历史中引入的,而“正常”的开发仍然在其他分支中进行。

这是一种合法的合并冲突情况,而不是错误或损坏的工作目录或任何东西(正如其他一些答案所暗示的那样)。GIT-LFS只是处理得不好。

您现在要做的是确保冲突文件的正确版本进入GIT-LFS,因此您可能想要选择这个问题的答案…(注意事项:插入至少一个有效答案的链接)

如果你只是想摆脱那个糟糕的承诺,你可以回到master by

git reset --soft origin/master
git reset --hard

然后你从讨厌的7非lfs文件中解脱出来:-)