繁体   English   中英

Git正在跟踪目录,不会忽略它们

[英]Git is tracking directories and will not ignore them

我必须至少阅读了50条StackOverflow问题和答案,这些问题和答案说Git无法跟踪目录。 但是,这似乎正在发生。

我创建了一个项目(在Windows上为.NET),并在添加.gitignore之前添加并提交了所有文件。 后来意识到我的错误,我git rm -r --cached:/一切,添加了.gitignore ,并重新添加并提交了我的文件。 问题是,即使.gitignore中的git和bin文件夹似乎被忽略,git仍然跟踪我的obj和bin文件夹。

以下是.gitignore中的相关行:

[Bb]in/
[Oo]bj/
bin/**
obj/**

其中一两个可能没有意义,我对.gitignore规则并不完全熟悉,只是想看看会发生什么。

这是我对git status的了解:

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    src/main/dotnet/ETB/ETB.Droid/bin/
    src/main/dotnet/ETB/ETB.Droid/obj/
    src/main/dotnet/ETB/ETB.iOS/bin/
    src/main/dotnet/ETB/ETB.iOS/obj/
    src/main/dotnet/ETB/ETB/bin/
    src/main/dotnet/ETB/ETB/obj/
    src/main/dotnet/packages/

即使在我从根级别执行git rm -r --cached。\\ src \\ main \\ dotnet \\ ETB \\ ETB.Droid \\ bin之后,也是如此。 当我执行git status时,这些目录中还有零跟踪的文件,这些文件显示在“未暂缓提交的更改”部分中。

我真的非常难过。 谁能帮我弄清楚为什么我不能完全忽略这些目录?

更新资料

我进行了评论者建议的更改,它似乎解决了部分但不是全部问题(对不起,我在这里稍作回答就对了)。 我的.gitignore根目录中的相关行是:

**/[Dd]ebug/**
**/bin/**
**/obj/**

第一行可能不是必需的,但我认为这不会造成伤害。 这些行中绝对没有多余的空格。

由于某种原因,Git中仍然只显示一个obj目录。 我什至删除并重新添加了所有内容以进行尝试。

令人讨厌的目录是ETB.Data目录:

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        src/main/dotnet/ETB.Data/

所以我运行了这个命令:

git rm -r --cached .\src\main\dotnet\

然后我提交了这些删除。 然后我尝试重新添加目录

git add .\src\main\dotnet

当我查看自己的状态时,会看到以下内容:

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   src/main/dotnet/ETB.Data/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
        new file:   src/main/dotnet/ETB.Data/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
        new file:   src/main/dotnet/ETB.Data/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
        new file:   src/main/dotnet/ETB.sln
        ...
        ...

为什么这些文件一直显示? 其他项目目录中的obj和bin目录将被忽略。 有谁知道为什么不忽略这一点?

您需要告诉git忽略所有bin / obj文件/文件夹,而不仅仅是其根目录下的文件/文件夹:

**/bin/**
**/obj/**

来自man gitignore

  • 前导“ **”后跟斜杠表示在所有目录中均匹配。 例如,“ ** / foo”与文件“ foo”在任何位置都匹配文件或目录“ foo”。 “ ** / foo / bar”与文件或目录“ bar”匹配,直接位于目录“ foo”下。

  • 尾部的“ / **”匹配内部的所有内容。 例如,相对于.gitignore文件的位置,“ abc / **”匹配目录“ abc”内的所有文件的深度是无限的。

那很简单,因为您的.gitignore文件中的行不正确。 我现在无法对其进行测试,但可以尝试例如以下操作

**/bin/**
**/obj/**

如果您没有在开头写* ,那么您的行将被解释为开始。

如果阅读手册页,则会有很好的评论。

前导“ ”后跟斜杠表示在所有目录中均匹配。 例如,“ / foo”在任何位置都与文件或目录“ foo”匹配,与模式“ foo”相同。 “ ** / foo / bar”与文件或目录“ bar”匹配,直接位于目录“ foo”下。

尾部的“ / ”匹配内部的所有内容。 例如,相对于.gitignore文件的位置,“ abc / ”匹配目录“ abc”内的所有文件的深度是无限的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM