WinXP + mysisGit1.7
在我的.gitignore文件中,但仍然看不到git跟踪Demos/path/to/file/file.cpp
。
我有以下条目:
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有类似问题。
答案 0 :(得分:10)
您的.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/*
。
答案 1 :(得分:1)
请按以下方式添加到.gitignore
:
folderUnderRepoRoot/**/*
!folderUnderRepoRoot/tracking.cpp
但请确保至少有一个文件从folderUnderRepoRoot
文件夹添加到git索引。
答案 2 :(得分:0)
您可以尝试将其替换为!/Demos/path/to/file/file.cpp
(请注意感叹号后的前导斜线),然后重试吗?
答案 3 :(得分:0)
如果它只是一个文件,我通常不会修改.gitignore
以下内容应忽略.gitignore
并允许您添加文件
git add -f Demos/path/to/file/file.cpp