GIT - 无法忽略 .suo 文件

112

我正在尝试与我的同事共同使用Git处理一个C#应用程序。

我们已将"project1.suo"条目添加到.gitignore文件中,但每当我们中的一个人必须提交该项目时,Git似乎会告诉我们也要提交"project1.suo"文件。

我们尝试了许多方法来在.gitignore中添加该文件,例如:

*.suo
project1.suo
c:\project\project1.suo

我们无法解决这个问题。


2
.gitignore文件本身会被添加到仓库中吗? - Steve B
是的,它在代码库中。 - Laxedur
3
我猜这个文件已经被添加过了,尝试显式地在该文件上运行 "git rm" 命令,提交更改并查看它是否仍然被建议为已添加的文件。 - Steve B
你能告诉我如何使用rm命令吗?因为我尝试了,但是命令找不到文件... - Laxedur
@SteveB .gitignore 不需要添加到存储库即可生效。 - Ikke
3个回答

212

Git 不会忽略已经添加到仓库中的文件。如果你想忽略某个文件,必须从仓库中删除该文件:

git rm --cached project1.suo
git commit -m "Delete suo file from repository"

这将从代码库中删除文件,但它仍然存在于您的硬盘驱动器上。


如果您删除*.suo文件,那么它肯定不会将这些文件推送到远程。这会对克隆此项目的人造成问题吗? - Waqas
如果您正在使用Visual Studio客户端,则无法从中执行此操作,您必须使用cmd shell。但是,如果我从shell中使用rm命令,我将看到带有删除线的.suo文件,但是如果我通过VS UI提交更改,它将重新出现。您必须通过命令行执行上述两个命令。 - Michael Blackburn
1
@Waqas 不会,Visual Studio 只会为它们创建一个新文件。这时候,将 *.suo 排除在仓库之外的 .gitignore 就显得非常重要了。当他们提交时,他们检出的 .gitignore 将防止他们(或至少是劝阻他们)检入自己的 SUO 文件。 - Michael Blackburn
6
对于一些新手来说,这可能不是很明显。 这个方法非常有效。要执行此命令,您必须处于.suo所在文件夹内部。您需要在cmd.exe中运行的第一个命令是更改目录 "CD <输入.suo文件所在文件夹的完整路径>",然后按回车键。默认情况下,您可能看不到包含.suo的.vs文件夹,因此请确保在存储库文件夹根目录中启用了显示隐藏文件的选项。我的文件没有项目名称,只有扩展名。git rm --cached .suo git commit -m "从存储库中删除suo文件" - moto_geek
如果需要忽略文件夹,并且它已经在远程仓库中,可以使用命令中的-r选项,git rm -r --cached <文件夹路径>。 - Somnath Kadam
我通过 TFS git 的 Web 接口删除了项目的 .suo 文件,这样做起作用了。 - AntiqTech

5
我经常会回到这个问题并使用答案中的方法,但我发现了一个更好的解决方案,那就是忽略对这个文件的更改。该方法是:
git update-index --assume-unchanged project1.suo

或者
git update-index --assume-unchanged .vs/config/applicationhost.config

要取消此操作,请使用--no-assume-unchanged。

我收到一条消息:“致命错误:无法标记文件Web<目录>/<要排除的文件>”。 - dancerjude
请注意,当有人更新文件时,这将导致问题。Git 将尝试更新文件,但会注意到它已更改并给出错误消息。无论如何,--skip-worktree--assume-unchanged 更好,后者仅应出于性能原因使用。 - Ikke

-4

我曾经遇到过同样的问题。Ikke的解决方案有所帮助,但不要忘记从你的.gitignore文件中删除*.suo条目(如果有的话)。在文件被更正后,执行以下操作:

git add **/*.suo

1
不应该从.gitignore中删除.suo以满足OP的要求。 - Caltor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接