git 忽略异常不按预期工作

标签 git windows-xp gitignore

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)。

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

  1. 排除目录的内容。
  2. 重新包含指向您的文件的子目录(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/

相关文章:

windows - 没有 CredSSP 的双跳访问复制文件

console - 控制台宽度存储在 Windows 注册表中的哪个位置?

ruby - 使用 Mechanize 对象获取 `certificate verify failed (OpenSSL::SSL::SSLError)` 错误

git - 将 .gitignore 转换为ignore.conf

Jenkins 中的 Android Git 标签

git - 带有git的maven发布插件在子文件夹中不起作用

.net - 使用 VS 解决方案的 git 子模块时如何解析 nuget 包

git - Git 中的 HEAD 是什么?

git - 如何永久防止文件的特定部分在 git 中提交?

git - 如何让git默认忽略对子模块的更改