git忽略异常不按预期工作

时间:2010-09-08 13:02:32

标签: git windows-xp gitignore

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有类似问题。

4 个答案:

答案 0 :(得分:10)

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

作为一种丑陋但功能强大的解决方法,请对文件路径中的每个目录执行此操作:

  1. 排除目录的内容。
  2. 重新包含指向您文件的子目录(最后,重新包含您的文件)。
  3. 您的条目如下所示,每个两行部分对应一个目录级别的上述两个步骤:

    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