git - 为什么 visual studio 在我的 .gitignore 文件中提交文件?

标签 git visual-studio-2013 gitignore

我在项目中使用 Visual Studio 2013 Express 和 Git。

我创建了我的存储库并将项目文件从另一个目录复制到其中。然后我检查了我的 .gitignore.gitattributes 文件。 .gitignore 是预先配置的,看起来涵盖了此时提交时我需要忽略的所有内容。

我在 Visual Studio 中的“团队资源管理器”选项卡下选择了“更改”选项卡,结果发现我的所有文件都没有被跟踪,正如预期的那样。然后我单击“全部添加”。我假设 VS 只会将与我的 .gitignore 中的文件不匹配的文件添加到“包含的更改”列表中。相反,所有文件都被添加到“包含的更改”列表中。

然后我想也许在提交时会使用 .gitignore 文件,并且只有与 .gitignore 中的文件不匹配的文件才会被提交。所以我添加了一条提交消息并单击“提交”。

当我从“更改”选项卡的“操作”下 pull 列表中选择“查看历史记录”时,我会在“团队资源管理器” View 左侧看到一个 Pane ,其中显示了我所做的所有提交。只有 1 次提交。当我双击该提交时,“团队资源管理器”选项卡显示 Commit 8db34b1c 并且我项目中的所有文件都列在 TreeView 中,名称后有 [add]。

例如,App_Data/Movies.mdfApp_Data/Movies.ldf 被列出,即使我的 .gitignore 包含行

# SQL Server files
App_Data/*.mdf
App_Data/*.ldf

我不明白这里如何使用 .gitignore 文件或“包含的更改”、“排除的更改”或“未跟踪的文件”部分的含义。

如能解释上述行为和部分,我们将不胜感激。

编辑--

我删除了我的 .git 目录,创建了一个新的 repo,再次复制了我的项目文件,然后截取了我所看到的内容。

这是我的 .gitignore 文件和“更改”选项卡的图像。

enter image description here enter image description here

this SO questionthis msdn question这表明其他人似乎也有问题。我尝试删除 VS 在我的 .git 目录中添加的 .xml 文件(如 msdn 问题中所述),但这并没有解决我的问题。

编辑 2 --

这是我当前的目录结构:

/MvcMovie/
    |--.git/
    |
    |---MvcMovie/
    |       |--App_Data/
    |       |     |--Movies.mdf
    |       |     |--Movies.ldf
    |       |     
    |       |--App_Start/
    |       |--etc...
    |
    |--packages/
    |--.gitignore
    |--.gitattributes
    |--MvcMovie.sln
    |MvcMovie.v12.suo

最佳答案

@dustinmoris 就在his answer ,但修复并不像程序会让您相信的那么明显。因此,让我明确地引导您完成整个过程,以确保 Visual Studio 遵守 .gitignore 文件中的文件。

<强>1。创建您的解决方案并将其添加到源代码管理 Visual Studio 2013 Solution Creation

我创建了一个示例 MVVM Light XAML 解决方案,您可以看到理想情况下应添加到下一次提交的所有当前未跟踪的文件在其图标旁边显示一个小绿色加号。

Solution directory listing

问题是 MvvmLight.Win81_TemporaryKey.pfx 文件被列为要添加,即使类型为 .pfx 的所有文件都在我的文件中被明确调用以忽略.gitignore.

gitignore

如果我在 Team Explorer 面板中选择解决方案,然后选择 Changes 按钮,这一点会更加明显。我看到所有待包含在下一次提交中的文件的列表。

Team Explorer Changes

此列表包含解决方案中的每个文件,而不仅仅是 .gitignore 文件指定的子集。

<强>2。关闭 Visual Studio 并删除 ms-persist.xml 文件

它位于 stash 目录中,因此很难找到。它应该位于以下路径

Solution Directory\.git\ms-persist.xml

ms-persist.xml file

<强>3。重新打开解决方案并提交文件

您会注意到,您的解决方案似乎不再受源代码管理,因为所有图标都失去了绿色加号,但别担心,这很好。

Solution directory listing after deleting ms-persist.xml

转到 Team Explorer 面板,然后选择 Changes 按钮。同样,您会看到该项目仍在由源代码管理进行跟踪,以及要在下一次提交时添加的所有文件的列表。更重要的是,您会注意到这次正确地遵守了您的 .gitignore 列表,所有指定为忽略的文件不再列为要添加到下一次提交的待定更改。如下所示,MvvmLight.Win81_TemporaryKey.pfx 文件不再计划用于下一次提交!

Corrected commit changes

希望对某人有所帮助。在所有这些麻烦之后,这是我诚实的建议:

Learn and use the command line interface since it provides the full range of functionality git offers and has the same interface on all platforms.

关于git - 为什么 visual studio 在我的 .gitignore 文件中提交文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22289849/

相关文章:

c# - 如何找到引用错误版本程序集的内容并修复它?

c# - 使用类库中的 View

c# - 如何使用 Visual Studio 2013 创建 Uml 图

android - 如何在 git-ignore 文件 android 中添加 gradle.properties?

git - 如何从损坏的 git 工作文件夹中恢复文件

git - 如何在 Visual Studio 中删除未推送的传出提交?

.net - 在 Visual Studio 中使用 Git 的最佳实践?

android - Git中的Android构建版本自动化

python - git ignore 在使用 GCloud 的 gcloudignore 时不忽略文件

git - .gitignore 不忽略 package.json