".gitignore文件被Visual Studio忽略了?"

7
我有一个使用Visual Studio 2013和Git的git项目。我注意到在我的.gitignore文件中列出的许多,如果不是全部文件仍然被列在Team Explorer窗口的待提交更改中。然而,当使用bash进行git状态检查时,我没有看到这些文件(应该如此)。为什么会发生这种情况,更重要的是,我如何让Visual Studio像git bash一样处理我的.gitignore文件? .gitignore文件请参见上文。 Team Explorer中的待提交更改请参见上文。

在上面的例子中,你的代码库的工作目录在哪里? - Edward Thomson
文件夹结构将是 C:\MyRepository\Source\MyProject\intranet\dotnet,其中 MyRepository 是工作目录,而 dotnet 文件夹对应于第二个截图中显示的文件夹。.gitignore 文件位于工作目录中。 - Adam Drewery
4个回答

4
我遇到了与链接文件相关的相同问题。Team Explorer声称我正在添加这些链接文件,所以我将它们全部添加到我的.gitignore中。git status现在是干净的,但Team Explorer仍然显示这些文件已被添加。
右键单击Team Explorer中的文件列表并选择“撤消”似乎可以解决问题。这些文件本身没有被删除,并且它们从我的更改列表中删除了。
看来Team Explorer不能立即识别.gitignore的更改。希望这能有所帮助。

4
如果你的文件已经被标记为“包含更改”,那么将它们添加到.gitignore中不会对它们产生任何回溯影响。 - Edward Thomson
1
我经常不得不这样做 - 虽然这不是一个永久的解决方案 - 这些文件会不断地弹出来,由于我正在处理的应用程序,这些文件可能会有数百个!对于每一个单独的文件都点击“撤消”非常繁琐。 - Adam Drewery
1
+1 这个解决方案很糟糕,但总比没有强 :( - Carrie Kendall

4
为了使Visual Studio 2013包含您对.gitignore文件所做的更改,请删除解决方案的.git文件夹中的ms-persist.xml文件。

2
这并不会做任何事情,它是自动生成的,并且在在 Team Explorer 中切换“更改”面板后将会重新生成。 - Carrie Kendall
是的,它将被重新生成,但它也会重新读取.gitignore文件。 - Amged Rustom
1
Visual Studio 2015 似乎仍然会由于某些变更在 .gitignore 文件中感到困惑。删除 ms-persist.xml 文件对我来说解决了这个问题,所以 +1。 - Pasi Savolainen

1
我想分享一下我在Visual Studio 2017中的非常相似的经历,尽管在我的情况下,命令行上的git没有承认列在我的.gitignore中的文件。我使用PowerShell创建了我的.gitignore文件,命令为echo '' > .gitignore。这将创建一个以UCS-2 LE BOM编码的文件,而不是UTF-8。因此,git会在git status中列出该文件,但指定的文件都不会被忽略,直到我将其转换为UTF-8。所以...要小心使用这样的PowerShell命令创建空文件,尽管我很想加入UTF-16阵营。正如另一个答案所提到的,我应该使用类似于echo '' | Out-File .\.gitignore -encoding Utf8的命令来最初创建文件,尽管这会创建带有BOM的UTF-8文件。
另一个回答学到的以下命令将复制文件内容并创建新文件,只使用常规的UTF-8而没有BOM:
Get-Content -Encoding utf8 .\.gitignore.bak | Out-File -Encoding utf8 .\.gitignore

0

这是一个老问题,但仍然相关。在我的情况下,在Visual Studio Community 2015上,.gitignore正在被处理它错误地解释规则。

例如,这个.gitignore文件在CLI git客户端中有效 - 它忽略除/Assets/Scripts子树和.gitignore文件之外的所有内容。

# Ignore everything
*
# But descend into directories
!*/
# Recursively allow files under subtree
!/Assets/Scripts/**
#don't ignore this file
!.gitignore

当VS解析上述.gitignore文件时,它似乎错误地将允许的文件夹解释为:允许此文件夹以及其中所有文件和子文件夹-因此每个子树都会错误地显示在存储库中。为了在Visual Studio中实现与上面代码相同的结果,我不得不将其更改为以下内容:请注意,以下代码适用于VS,但不再适用于Git CLI。

# Ignore everything
*
#But don't ignore the /assets folder
!/Assets/
#Ignore everything inside the assets folder
/Assets/*
#but don't ignore the Assets/Scripts subtree
!/Assets/Scripts
#don't ignore this file
!.gitignore

Gitignore 无法忽略自身。 - abr

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