Visual Studio项目的.gitignore文件无效

68
我正在使用标准的Visual Studio .gitignore文件,但Git for Windows仍然包括构建文件和其他内容。如何解决这个问题?
我正在使用的Git ignore文件是:https://github.com/github/gitignore/blob/master/VisualStudio.gitignore。Visual Studio会自动生成相同的文件。
该文件名正确,并且放置在正确的位置。

enter image description here

当我输入git status命令时,它会显示构建文件{{build files}}。

enter image description here


文件是否在正确的位置?“构建文件和其他文件”具体指什么?如果您在带有Git访问权限的命令提示符或Shell中CD到存储库,并执行git status,它是否也显示文件? - stijn
我们需要更多的细节。请更新问题(在评论中很容易丢失细节)。您是否自定义了.gitignore?未被忽略的文件的(相对)路径是什么?命令行git显示了什么(https://gitforwindows.org/)? - Richard
1
请注意,文件的名称应为.gitignore,而不是VisualStudio.gitignore - petrpulc
@stijn 我更新了我的问题。 - IntegerOverlord
8个回答

117

如果您想要停止跟踪gitignore文件中的文件;
请打开命令提示符并导航到包含解决方案文件(.sln)的目录,然后运行以下命令(前两条命令在结尾带有一个点):

  1. 从Git索引中删除所有项目(不是从工作目录或本地存储库中删除):
    git rm -r --cached . 
  1. 根据gitignore更新Git索引:
    git add .
  • 提交更改:
  •     git commit -am "Remove ignored files"
    

    然后打开你的Visual Studio并同步你的仓库。 我发现这对我有用。 我在这里找到了git命令。


    3
    这应该是被认可的答案,然而你需要加上关于为什么文件不会消失的解释(即它们已经被追踪),并且也许需要添加一些命令的说明。 - Mathias Mamsch
    2
    git rm -r --cached . 会删除你当前的文件夹。注意不要复制粘贴这个命令。 - jimh

    57

    我们采用了以下方法:

    1. 检查 .gitignore 文件 - 看起来没问题(bin/Debug 文件夹内容被忽略)
    2. 检查 GIT 存储库中这些文件(bin/Debug 文件夹内容)- 这些文件在那里 => 与忽略文件不一致
    3. 本地删除这些文件并提交和推送(使用 .gitignore 定义来缩小 GIT 文件范围)
    4. (可选)重新启动 Visual Studio 并执行 Pull 操作
    5. 存储库和 VS 现在似乎处于一致状态

    8
    这比从头创建存储库的方法要有效,而从头创建的建议是不理智的。这是正确的方法。一旦您删除了.gitignore文件并重新添加,Git就可以正常工作了。 - Chris Go
    1
    我不需要重新启动VS。在更新了我的.gitignore文件后,我只需进入我的解决方案并删除我不想让GIT跟踪的文件,然后进行检入...一切都很顺利。 - Bjørn
    1
    这太完美了!同步远程仓库以使本地和远程一致对我很有效。 - Cory
    3
    这应该是被接受的答案——针对问题的简单修复。 - Shoom Kloom
    当代码库没有重要的历史记录时,这种方法才是合适的,因为创建新仓库将导致历史记录丢失。 - tdog
    1
    这对我也起作用了。删除所有的bin和obj文件夹,提交并推送,重新启动vs并拉取。现在它可以工作了。 - Mark

    32
    文件已经被修改过了,这意味着它们在你添加.gitignore文件之前(或者你已经明确地添加了它们)就已经在git存储库中了,所以现在不能再'忽略'对它们的更改。
    如果可能的话,请重新开始并从头创建存储库,但现在先提交一个仅包含.gitignore文件的第一次提交(顺便说一句,这总是一个好主意),然后再提交一个添加所有源文件的第二次提交;构建文件将被忽略。
    或者,您可以使用交互式变基来重写历史记录,通过修改您添加这些文件的提交,并在较早的提交中添加.gitignore也不错。或者您可以使用分支过滤来清除所有这些文件的痕迹。还有其他选项。

    19
    请查看 Honza P. 的回答,而不是这个。这一个有点过头了... 至少可以这么说。 - Bjørn
    2
    我很感激这个答案的第一句话,因为它帮助我理解了我所经历的问题或行为。但我不建议使用这个答案来真正解决问题。 - Travis

    19

    问题终于解决了

    这个小技巧帮助了我。它会移除所有被缓存为“已跟踪”的文件,然后根据.gitignore文件重新添加文件。

    第一步:

    递归地(-r)移除所有被缓存为已跟踪的文件 (git rm)。

    git rm -r --cached .
    

    然后:

    将所有已更改或未纳入缓存的文件重新添加回来(git add .); 这将以它们原来的形式重新添加这些文件,因此不需要“重新保存”文件,它们将仅从git更改中消失,这会删除该文件(以及由第一个命令引起的所有其他文件),结果是“更改”或 git status 只应显示那些现在将被.gitignore忽略的文件(如果它们之前未被忽略)。

    git add .
    

    资源:

    https://sigalambigha.home.blog/2020/03/11/how-to-refresh-gitignore/

    这对我来说是一个长期的挣扎,终于当我想要将我的更改合并回主分支时,我的dll文件不再出现问题了!

    我为dotnet-core项目创建的.gitignore文件:

    "
    
    \# file types<br>
    *.cache<br>
    *.dtbcache.v2<br>
    *.dll<br>
    *.pdb<br>
    *.suo<br>
    .suo<br>
    *.testlog<br>
    *.user<br>
    
    \# directories<br>
    **/Release
    

    "

    -->

    "


    13

    可以停止跟踪任何已检入文件的更改。您需要先告诉git从其索引中删除该文件,方法是在给定的存储库中调用以下命令:> git rm --cached <file>。然后更新您的.gitignore文件以排除该文件。最后提交文件的删除操作。

    来源:Microsoft Git指南


    3
    这个方法非常有效,应该被采纳为最佳答案。@SaintMSent - Tim
    @SaintMSent 这绝对应该是被采纳的答案,完美地运作并且非常容易! - Luis Ferrao

    1

    我曾经遇到过.cache文件的问题,以下步骤解决了我的问题:

    1. 添加.gitignore文件
    2. 暂存并提交
    3. 手动删除*.cache文件(在Windows资源管理器中查找)
    4. 在VS - 团队资源管理器 - 更改中刷新更改
    5. 撤销待处理更改(前提是您已经提交了所有要保留的更改!)
    6. *.cache文件不再列在更改列表中

    希望对你有所帮助。


    0

    这些文件已经被修改,也就是说在你添加.gitignore文件之前(或者你已经显式地添加了它们),它们已经存在于git存储库中,所以现在不能再‘忽略’对它们的更改了。

    很疯狂,但以下方法适用于我。

    重新创建新的解决方案。

    在添加任何内容之前,我添加了.gitignore.gitattribute文件。

    然后,在团队资源管理器中,那些文件从未出现在git变更中。虽然重做很痛苦,但还是要吸取教训。

    如何从Visual Studio添加.gitignore

    从菜单栏选择Git > 设置 > Git存储库设置 > 在忽略文件旁边点击添加。这将为您添加与属性文件相同的.gitignore文件。> 点击确定。

    希望这能帮到您。


    -2

    在VS Code 1.56.0中,以下方法适用于让VS Code忽略尚未被跟踪但显示为已更新(文件旁边有绿色U标记)的文件:

    • 编辑你的.gitignore文件,将Source Control侧边栏列出的已更新文件加入忽略列表
    • 在Source Control侧边栏中右键点击要忽略的文件之一(它应该已经被你在上一步手动修改过了),从弹出菜单中选择Add to .gitignore
    • 这会导致VS Code重新读取.gitignore并刷新Source Control侧边栏中的更改文件列表
    • 所有以前未被跟踪的文件,如果在.gitignore中被覆盖,则不再显示为“已更新”并从Source Control侧边栏中消失

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