git忽略异常没有按预期工作

Posted

技术标签:

【中文标题】git忽略异常没有按预期工作【英文标题】:git ignore exception not working as desired 【发布时间】:2011-04-09 17:45:36 【问题描述】:

WinXP + mysisGit1.7

在我的 .gitignore 文件中,但仍然看不到 Demos/path/to/file/file.cpp 被 git 跟踪。

我有以下条目:

Demos/
!Demos/path/to/file/file.cpp

绝对路径为:c:\Project\Demos\path\to\file\file.cpp

可能出了什么问题?请帮忙,谢谢。

编辑:

我发现 mysisGit .gitignore 在 WindowsXP 上的工作方式只能忽略某些类型的文件,然后排除一些相同类型的文件。例如:

*.bak
!tracking.bak
!/path/to/file/tracking2.bak

忽略文件夹并排除该文件夹下的某些文件不起作用。以下行不通:

/folderUnderRepoRoot/
!/folderUnderRepoRoot/tracking.cpp

也没有

anyFolderNamedLikeThis/
!anyFolderNamedLikeThis/tracking.cpp
!/anyFolderNamedLikeThis/tracking.cpp

但是,我确实发现有一个例外。有一种解决方法可以在被忽略的文件夹(而不是其子文件夹)下排除文件。 这行得通。

/folderUnderRepoRoot/*
/folderUnderRepoRoot/tracking.cpp

但是这种方式只在文件不在任何子文件夹中的情况下是有限的,所以它不是那么有用。

所以我最终仍然提交了大部分源文件,即使我在跟踪其他一些大项目时只对几个文件感兴趣。这意味着有一堆文件我不会碰,但仍然需要提交。

这里是another thread,也有类似的问题。

【问题讨论】:

您是否git add Demos/path/to/file/file.cpp 开始跟踪它? @Stan:你找到解决方案了吗?我在 git 和 ubuntu 上发现了同样的问题,所以它与平台无关 我的回答有帮助吗? 【参考方案1】:

您的.gitignore 例外不起作用,因为“如果排除了该文件的父目录,则无法重新包含该文件”(source)。这是“Git 中与性能相关的怪癖”(source)。

作为一个丑陋但实用的解决方法,对文件路径中的每个目录执行此操作:

    排除目录的内容。 重新包含指向您的文件的子目录(最后,重新包含您的文件)。

您的条目将如下所示,每个两行部分对应于一个目录级别的上述两个步骤:

Demos/*
!Demos/path/

Demos/path/*
!Demos/path/to/

Demos/path/to/*
!Demos/path/to/file/

Demos/path/to/file/*
!Demos/path/to/file/file.cpp

注意事项:

第一行不是Demos/,与问题作者尝试的不同。 Demos 是我们文件的父目录,所以我们必须在之后重新包含它——也就是说,我们不必首先排除它。相反,我们首先排除其内容Demos/*

【讨论】:

我喜欢这个答案,但我只需要一个星号 Demos/*Demos/path/*,而不是两个星号 **。来自documentation:Example to exclude everything except a specific directory foo/bar @TheRedPea 你说得对!我已经调整了我的答案。尾随 /** 仅在重新包含时有所不同(!… 行)。排除时,与/*相同。【参考方案2】:

如果只是一个文件,我通常不会修改.gitignore

以下应该忽略.gitignore并允许您添加文件

git add -f Demos/path/to/file/file.cpp

【讨论】:

【参考方案3】:

请按如下方式添加到.gitignore

folderUnderRepoRoot/**/*
!folderUnderRepoRoot/tracking.cpp

但请确保至少有一个文件从folderUnderRepoRoot 文件夹添加到 git 索引。

【讨论】:

【参考方案4】:

您可以尝试将其替换为!/Demos/path/to/file/file.cpp(注意感叹号后的前导斜杠),然后重试吗?

【讨论】:

以上是关于git忽略异常没有按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

Selenium 超时异常未按预期工作

C# 中的异常未按预期运行

为啥这个 SUM() 字段没有按预期工作?

为啥响应式表没有按预期工作?

为啥脚手架没有按预期工作?

否定字符没有按预期工作? ^