为什么这些文件没有被git忽略?

7

我的.gitignore文件包含以下行:

 xcuserdata/**/*
 !xcuserdata/**/xcschemes/*

以下文件仍在被跟踪:/MyApp/MyApp.xcodeproj/xcuserdata/colas.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist 为什么会这样?我该怎么解决?
PS:如果我有MyApp.xcodeproj/xcuserdata/colas.xcuserdatad/xcdebugger,那么这些文件就会被忽略。但是我不明白为什么没有这个“hack”它们就无法被忽略。

编辑1

与其中一个答案所说的相反,模式
 xcuserdata/**/*
 !xcuserdata/**/xcschemes/*

运行正常!我的意思是,/xcschemes目录下的文件已被跟踪。

另请参阅帖子Git ignore file for Xcode projects,我在那里获取了这个.gitignore文件。

编辑2

我的Git版本是1.8.3.4(Apple Git-47)

编辑3

当我对此文件执行git check-ignore命令时,我获得以下输出:

  fatal: Not a git repository (or any of the parent directories): .git

但事实上,父目录是一个git目录...

编辑4

当我运行git check-ignore --no-index --命令时,得到以下结果

[MT] PluginLoading: Required plug-in compatibility UUID 37B30044-3B14-46BA-ABAA-F01000C27B63 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/XcodeSnippetsHelper.xcplugin' not present in DVTPlugInCompatibilityUUIDs
2014-02-10 10:03:50.856 xcodebuild[1496:d07] XcodeColors: load (v10.1)
2014-02-10 10:03:50.859 xcodebuild[1496:d07] XcodeColors: pluginDidLoad:
fatal: Not a git repository (or any of the parent directories): .git

编辑4bis

从根文件夹开始:

  • 如果我不使用 no-index 选项,则 git check-ignore 不会有任何回复。

  • 如果我使用了 no-index 选项:我会收到错误消息 error: unknown option 'no-index'...

很奇怪吧;-!


你使用的是哪个 Git 版本? - VonC
好的,我知道最近有一些关于 '**' 模式的修复,所以看看在 1.8.5.x 版本中问题是否仍然存在会很有趣。 - VonC
你可以尝试使用 git check-ignore --no-index -- yourFile 命令吗?它可以用来诊断哪些本应该被忽略的路径被错误地添加到了索引中。 - VonC
尝试使用git check-ignore(带或不带--no-index选项)从您的git存储库的根文件夹中,使用文件的完整路径:cd /MyApp/MyApp.xcodeproj; git check-ignore -- xcuserdata/colas.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist - VonC
2个回答

6
首先,您可以执行git check-ignore (git 1.8.3.3+)来查看哪个规则正在忽略您的文件(假设它一开始不在索引中)。
其次,请阅读 ".gitignore exclude folder but include specific subfolder":

如果父目录被排除,则无法重新包含该文件。(*
*:除非在 git 2.8+ 中满足某些条件)
出于性能原因,Git 不会列出已排除的目录,因此对包含文件的任何模式都没有影响,无论它们在何处定义。

因此,xcschemes 文件仍然会被忽略。
您需要为每个父文件夹分别进行忽略
但更好的方法是仅忽略文件,然后排除文件夹:
xcuserdata/**
!xcuserdata/**/
!xcuserdata/**/xcschemes/**

请记住:

在能够排除文件之前,您需要从gitignore规则中排除文件夹。


请注意,使用git 2.9.x/2.10(2016年中期?)可能会重新包含一个文件,如果该文件的父目录被排除如果路径中没有通配符重新包含Nguyễn Thái Ngọc Duy (pclouds)正在尝试添加此功能:

然而:

重新包含规则中的目录部分必须是字面意义上的(即没有通配符)。
所以在这里也不起作用。

我会尝试的。谢谢。 - Colas
我尝试按照您的建议更改,但该文件仍然出现在SourceTree中,并显示为“未跟踪”...谢谢您的帮助!我还执行了git check-ignore(请参见我的编辑)。 - Colas
我尝试了从根目录开始,并使用了 no-index 选项。结果不同。如果您知道发生了什么,请给我一些线索... - Colas
@Colas 关于使用 --no-index 选项出现的错误信息,你的 Git 版本可能太旧了,不支持该选项。因为它只在 1.8.5 版本之后引入的。 - VonC

0

将文件名添加到.gitignore可以防止您意外添加文件。 如果您执行像git add .这样的操作,将一个文件夹中的所有文件添加到存储库中,则在.gitignore中忽略的文件(或文件类型)将不会被添加。 必须使用-f标志和git add命令来添加它们。 如果文件已经被跟踪,则不会更改任何内容。

您可以使用以下答案停止跟踪文件: 从Git存储库中删除文件而不从本地文件系统中删除它

编辑:在多次重新阅读问题后,我认为您可能遇到了与此答案中解决的大致相同的问题: .gitignore-忽略任何“bin”目录


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