问题 在Git中,删除意外提交的DLL和PDB文件


我有一个git repo,我需要在没有冲突的情况下工作。它是.net / c#mvc repo。问题是dll和pdb文件。这些文件被意外地提交给了回购,所以当我做我的初始时 git pull,我得到了另一个开发者提交的所有这些文件。

我已经设置了 .gitignore 像这样:

bin/
obj/
App_data/

从其他帖子我相信这就是我应该做的,但是,如果我构建我的项目并运行 git status 它显示了许多将要提交的dll和pdb文件。

这是因为当克隆它时,那些文件存在于repo中吗?如果是这样,删除这些文件的最佳方法是什么?


3527
2017-08-26 20:11


起源

为什么 这些文件是在存储库中吗?您通常不会提交该类型的文件 - jalf
它们是由另一位开发人员错误地提交的,正如问题中所详述的那样。我知道通常不会提交这些文件。因此,关于如何去除它们的问题。 - Mike McCoy
不,这让我很困惑。你的问题,你实际上的问题 问 是关于如何忽略文件的更改。您应该编辑问题以匹配您真正想知道的内容:即, 如何删除意外提交的文件 - jalf
@jalf注意到并改变了。 - Mike McCoy


答案:


您需要先删除这些文件(git rm),在看到你之前 .gitignore directoves应用于你的git repo。

如果要将这些文件保留在工作树中,则只能从索引中删除这些文件。

git rm -r --cached a.dll

(见“.gitignore 文件不要忽略“)

但对于生成的文件,它们是否被删除无关紧要:您将在下一次编译时重新创建它们,但忽略它们,因为它们不再是索引的一部分。


11
2017-08-26 20:19



好的,只是为了确保我很清楚。我运行上面的命令,它将删除 所有 来自索引的dll文件,甚至那些可能是引用而不是专门构建文件的文件。但是,我的索引清除了那些文件 gitignore 文件应该正常运行,引用dll将被添加回来,但dll在我的 bin 和其他目录应该被忽略,对吗? - Mike McCoy
@MikeMcCoy是的, git rm *.dll:看 stackoverflow.com/questions/9529354/git-rm-several-files。这将从磁盘和git索引中删除它们。但是,如果这些文件已经从工作树(即磁盘)中删除,那么请考虑 stackoverflow.com/questions/636013/... - VonC
@MikeMcCoy关于你评论的第二部分,如果你 git rm 太多,然后是,所有未被忽略的dll将被添加回来,而另一个,因为它们不再是索引的一部分,将被忽略。 - VonC
谢谢你的答案和信息。非常感激。 - Mike McCoy


这是一个非常常见的问题,通常的答案是你不能清理过去的提交,但有一些特殊的工具。 git过滤器和更容易的BFG repo清洁器: http://rtyley.github.io/bfg-repo-cleaner/#usage


1
2017-09-25 20:58