【问题标题】:Why is visual studio committing files in my .gitignore file?为什么 Visual Studio 在我的 .gitignore 文件中提交文件?
【发布时间】:2015-05-22 21:08:28
【问题描述】:

我在一个项目中使用 Visual Studio 2013 Express,并使用 Git。

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

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

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

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

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

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

我不明白 .gitignore 文件在此处的使用方式或“包含的更改”、“排除的更改”或“未跟踪的文件”部分的含义。

将不胜感激对上述行为和部分的解释。

编辑--

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

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

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

【问题讨论】:

  • 你的git repo(由.git文件表示)是在MvcMovie目录还是MvcMovie目录之上?
  • 我的 git repo 位于顶部 MvcMovie 目录中。

标签: git visual-studio-2013 gitignore


【解决方案1】:

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

1.创建您的解决方案并将其添加到源代码管理

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

问题是MvvmLight.Win81_TemporaryKey.pfx 文件被列出来添加,即使.pfx 类型的所有文件在我的.gitignore 中都被显式调用以被忽略。

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

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

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

它在一个隐藏目录中,所以很难找到。它应该位于以下路径

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

3.重新打开解决方案并提交文件

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

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

希望对某人有所帮助。毕竟这里的麻烦是我诚实的建议:

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

【讨论】:

  • TLDR 版本,删除 .git\ms-persist.xml 并重新启动 Visual Studio。谢谢,这有帮助。
  • 不错的答案;尤其是最后一句话。在与太多具有无尽怪癖的所谓 UI 作斗争后,我得出了同样的结论。
  • 我自己也看到过,应用上述修复并没有坚持 - 在进行干净重建后重新添加了文件。查看 .gitignore 我发现它有 UNIX EOL。切换到 Windows EOL 成功了。
【解决方案2】:

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

只需手动修复 VS 的问题并重新启动 IDE,您应该会再次恢复正常!

不要像其他 SO 线程中经常提到的那样删除整个 .git 文件夹!

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

【讨论】:

    【解决方案3】:

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

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

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

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

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

    【讨论】:

    • 鉴于 Visual Studio 如何设置 .gitignore 文件,我应该如何创建我的存储库和/或项目,这样我就不必为每个新项目调整 .gitignore。例如,有一行 !packages/*/build/ 似乎以我的包文件夹为目标,但它与项目文件夹和 .gitignore 文件位于同一目录级别,这意味着(如果我没看错的话) App_Data/*.mdf 行不会像当前那样应用。
    【解决方案4】:

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

    # SQL Server files
    *.mdf
    *.ldf
    

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

    【讨论】:

      【解决方案5】:
      1. Team Explorer 中,转到您的解决方案,然后转到更改视图。
      2. 选择您要排除的愚蠢文件。
      3. 右键单击并选择忽略此扩展程序
      4. 您将看到对 .gitignore 进行了更改,您现在可以提交这些更改。

      .gitignore

      *.ldf
      *.mdf
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-17
        • 1970-01-01
        • 2018-01-06
        • 2017-12-05
        • 2015-04-13
        • 2018-01-23
        • 2019-05-13
        • 1970-01-01
        相关资源
        最近更新 更多