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忽略异常没有按预期工作的主要内容,如果未能解决你的问题,请参考以下文章