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
但是,我确实发现有一个异常(exception)。有一种变通方法可以将文件排除在被忽略的文件夹(而不是其子文件夹)的正下方。 这有效。
/folderUnderRepoRoot/*
/folderUnderRepoRoot/tracking.cpp
但这种方式只有当文件不在任何子文件夹中时才有用,所以用处不大。
所以我最终仍然提交了大部分源文件,即使我在跟踪其他一些大项目时只对少数文件感兴趣。这意味着有一堆文件我不会触及但仍需要提交它们。
这里是 another thread有类似的问题。
最佳答案
您的 .gitignore
异常不起作用,因为“如果排除了该文件的父目录,则无法重新包含该文件”(source)。这是“Git 中与性能相关的怪癖”(source)。
作为丑陋但实用的解决方法,对文件路径中的每个目录执行此操作:
- 排除目录的内容。
- 重新包含指向您的文件的子目录(resp. 最后,重新包含您的文件)。
您的条目看起来像这样,每个两行部分对应一个目录级别的上述两个步骤:
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/*
。
关于git 忽略异常不按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3667986/