我在项目中使用 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.mdf
和 App_Data/Movies.ldf
被列出,即使我的 .gitignore
包含行
# SQL Server files
App_Data/*.mdf
App_Data/*.ldf
我不明白这里如何使用 .gitignore 文件或“包含的更改”、“排除的更改”或“未跟踪的文件”部分的含义。
如能解释上述行为和部分,我们将不胜感激。
编辑--
我删除了我的 .git 目录,创建了一个新的 repo,再次复制了我的项目文件,然后截取了我所看到的内容。
这是我的 .gitignore 文件和“更改”选项卡的图像。
有 this SO question和 this 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。创建您的解决方案并将其添加到源代码管理
我创建了一个示例 MVVM Light XAML 解决方案,您可以看到理想情况下应添加到下一次提交的所有当前未跟踪的文件在其图标旁边显示一个小绿色加号。
问题是 MvvmLight.Win81_TemporaryKey.pfx
文件被列为要添加,即使类型为 .pfx
的所有文件都在我的文件中被明确调用以忽略.gitignore
.
如果我在 Team Explorer
面板中选择解决方案,然后选择 Changes
按钮,这一点会更加明显。我看到所有待包含在下一次提交中的文件的列表。
此列表包含解决方案中的每个文件,而不仅仅是 .gitignore
文件指定的子集。
<强>2。关闭 Visual Studio 并删除 ms-persist.xml
文件
它位于 stash 目录中,因此很难找到。它应该位于以下路径
Solution Directory\.git\ms-persist.xml
<强>3。重新打开解决方案并提交文件
您会注意到,您的解决方案似乎不再受源代码管理,因为所有图标都失去了绿色加号,但别担心,这很好。
转到 Team Explorer
面板,然后选择 Changes
按钮。同样,您会看到该项目仍在由源代码管理进行跟踪,以及要在下一次提交时添加的所有文件的列表。更重要的是,您会注意到这次正确地遵守了您的 .gitignore
列表,所有指定为忽略的文件不再列为要添加到下一次提交的待定更改。如下所示,MvvmLight.Win81_TemporaryKey.pfx
文件不再计划用于下一次提交!
希望对某人有所帮助。在所有这些麻烦之后,这是我诚实的建议:
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/