为什么git不会忽略这些文件?

时间:2014-02-08 08:03:36

标签: xcode git

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

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

但仍会跟踪以下文件 /MyApp/MyApp.xcodeproj/xcuserdata/colas.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist

为什么会这样?我该如何解决这个问题?

PS:如果我有MyApp.xcodeproj/xcuserdata/colas.xcuserdatad/xcdebugger,则会忽略这些文件。但我不明白为什么没有这个“黑客”它就不会忽视它们。


编辑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' ...

奇怪; - !

2 个答案:

答案 0 :(得分:4)

首先,您可以执行 git check-ignore (git 1.8.3.3+)来查看忽略您的文件的规则(假设它首先不在索引中)

其次,请阅读“.gitignore exclude folder but include specific subfolder”:

  

如果排除该文件的父目录,则无法重新包含文件。 (*
  (*:除非在git 2.8+中满足某些条件,请参阅下文)
  出于性能原因,Git不会列出排除的目录,因此无论在何处定义文件,所包含文件的任何模式都无效。

所以xcschemes的文件无论如何也不会被忽视 你需要ignore parent folder per parent folder 但更好的方法是仅忽略文件,然后排除文件夹:

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

记住:

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


请注意,使用git 2.9.x / 2.10(2016年中期?),如果排除该文件的父目录if there is no wildcard in the path re-included,则可能会重新包含文件。

Nguyễn Thái Ngọc Duy (pclouds)正在尝试添加此功能:

然而:

  

重新包含规则中的目录部分必须是文字(即没有通配符)

所以无论如何这都行不通。

答案 1 :(得分:0)

将文件名添加到.gitignore有助于防止您无意中添加文件。 如果您执行git add .之类的操作来将完整文件的文件夹添加到存储库,则不会添加.gitignore中忽略的文件(或文件类型)。 必须使用带有-f命令的git add标志添加它们。 如果已经跟踪了文件,它将不会改变任何内容。

您可以使用问题的答案停止跟踪文件: Remove a file from a Git repository without deleting it from the local filesystem

编辑:在重新阅读这个问题之后,我想你可能会遇到与此答案中解决的问题大致相同的问题: .gitignore - ignore any 'bin' directory