[英]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.