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

时间:2014-03-09 23:50:11

标签: git visual-studio-2013 gitignore

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

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

我在“团队资源管理器”选项卡下的Visual Studio中选择了“更改”选项卡,并按预期方式查看了所有文件未跟踪。然后我点击“全部添加”。我假设VS只会将与.gitignore中的文件不匹配的文件添加到“包含的更改”列表中。而是将所有文件添加到“包含的更改”列表中。

然后我认为提交时可能会使用.gitignore文件,并且只提交与.gitignore中的文件不匹配的文件。所以我添加了一条提交消息并点击了“提交”。

当我从“更改”标签中的“操作”下拉列表中选择“查看历史记录”时,我会看到“我的”“团队资源管理器”视图左侧的窗格,其中显示了我所做的所有提交。只有1个提交。当我双击该提交时,“团队资源管理器”选项卡显示Commit 8db34b1c,我的项目中的所有文件都在树视图中列出,并在其名称后面加[add]。

例如,即使我的App_Data/Movies.mdf包含行

,也会列出App_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表明其他人似乎也有问题。我尝试在我的.git目录中删除VS添加的.xml文件(如msdn问题中所述),但这并没有解决我的问题。

编辑2 -

这是我目前的目录结构:

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

5 个答案:

答案 0 :(得分:21)

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

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

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

Solution directory listing

问题在于列出了MvvmLight.Win81_TemporaryKey.pfx文件,即使.pfx中明确要求忽略.gitignore类型的所有文件,也要添加Team Explorer文件。

gitignore

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

Team Explorer Changes

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

<强> 2。关闭Visual Studio&amp;删除Team Explorer文件

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

  

解决方案目录 \ .git \ ms-persist.xml

ms-persist.xml file

第3。重新打开解决方案和提交文件

您会注意到,似乎您的解决方案不再受源代码控制,因为所有图标都丢失了绿色加号,但不要担心它没问题。

Solution directory listing after deleting ms-persist.xml

转到Changes面板,然后选择.gitignore按钮。同样,您将看到源控件仍在跟踪项目,以及下次提交时要添加的所有文件的列表。更重要的是,您会注意到您的MvvmLight.Win81_TemporaryKey.pfx列表已正确遵守此时间,并且指定为已忽略的所有文件不再列为要添加到下一次提交的挂起更改。如下所示,{{1}}文件不再安排用于下次提交!

Corrected commit changes

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

  

学习并使用命令行界面,因为它提供了完整的   git提供的功能范围,并且具有相同的界面   平台。

答案 1 :(得分:4)

如果有人想知道如何解决它。这是解决方案: 转到.git文件夹(可能是隐藏的)并打开ms-persist.xml,您可以看到跟踪的文件,排除的项目等。

只需手动修复VS搞砸了什么并重启IDE,你就应该再好了!

不要删除整个.git文件夹,就像在其他SO主题上经常提到的那样!

感谢Eric Nelson的博客文章: https://ericnelson.wordpress.com/2014/06/21/is-visual-studio-2013-ignoring-your-gitignore-file/

答案 2 :(得分:2)

AppData/*.mdfAppData/*.ldf是指存在于git存储库根目录中的.mdf目录中的.ldfAppData文件。

您的AppData目录实际存在于MvcMovie目录下。您可以添加:

MvcMovie/AppData/*.mdf
MvcMovie/AppData/*.ldf`

.gitignore忽略这些特定文件,或者,如果您想忽略所有 .mdf中的.ldfAppData目录整个存储库中的文件夹:

**/AppData/*.mdf
**/Appdata/*.ldf

答案 3 :(得分:0)

如果将.gitignore中的SQL数据库文件规范更改为:

# SQL Server files
*.mdf
*.ldf

忽略整个解决方案文件夹树中的所有SQL数据库文件,无论在哪个子文件夹中找到它都不会?

答案 4 :(得分:0)

  1. 团队资源管理器中,转到您的解决方案,然后转到更改视图。
  2. 选择要排除的愚蠢文件。
  3. 右键单击并选择忽略此扩展程序Team Explorer - Ignore this extension
  4. 您将看到对.gitignore所做的更改,您现在可以提交。
  5. 的.gitignore

    *.ldf
    *.mdf
    

    或者,如果您不想完全忽略扩展名,则可以使用忽略此本地项目仅忽略该特定项目。