git忽略异常

时间:2010-07-08 11:54:13

标签: git gitignore

我有一个gitignore文件,它使git忽略*.dll个文件,这实际上是我想要的行为。但是,如果我想要一个例外(即能够提交foo.dll),我该如何实现呢?

10 个答案:

答案 0 :(得分:389)

使用:

*.dll    #Exclude all dlls
!foo.dll #Except for foo.dll

来自gitignore

  

可选前缀!否定了这种模式;之前模式排除的任何匹配文件将再次包含在内。如果否定模式匹配,则将覆盖较低优先级模式源。

答案 1 :(得分:197)

如果你写下来,Git会忽略文件夹:

/js

但如果你这样做,它就无法添加例外: !/js/jquery!/js/jquery/!/js/jquery/*

你必须写:

/js/* 

只有这样你才可以像这样的子文件夹

!/js/jquery

答案 2 :(得分:51)

您可以简单地git add -f path/to/foo.dll

.gitignore只会忽略常规跟踪的文件和git add .

之类的内容

答案 3 :(得分:15)

要排除目录中的所有内容,但要排除某些子目录,请执行以下操作:

wp-content/*
!wp-content/plugins/
!wp-content/themes/

来源:https://gist.github.com/444295

答案 4 :(得分:14)

只需在排除规则之前添加!

根据gitignore man page

  

模式具有以下格式:

     

...

     
      
  • 可选前缀!否定了这种模式;之前模式排除的任何匹配文件将再次包含在内。如果否定模式匹配,则将覆盖较低优先级模式源。
  •   

答案 5 :(得分:5)

.gitignore中的

!foo.dll,或(每次!)git add -f foo.dll

答案 6 :(得分:3)

如果您正在使用Visual Studio并且您的.dll恰好位于bin文件夹中,那么您需要为特定的bin文件夹本身添加一个例外,然后才能添加例外.dll文件。 E.g。

!SourceCode/Solution/Project/bin
!SourceCode/Solution/Project/bin/My.dll

这是因为默认的Visual Studio .gitignore文件包含[Bbin]/的忽略模式

此模式正在切换所有bin文件夹(以及它们的内容),这会使任何尝试包含多余的内容(因为文件夹本身已被忽略)。

我能够找到为什么我的文件没有被运行

除外
git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll

来自Git Bash窗口。这返回了[Bbin]/模式。

答案 7 :(得分:2)

解决方案取决于git ignore规则和例外规则之间的关系:

  1. 同一级别的文件/文件:使用@Skilldrick solution
  2. 文件夹/子文件夹:使用@Matiss Jurgelis solution
  3. 不同级别的文件/文件或文件/子文件夹:您可以这样做:

    *.suo
    *.user
    *.userosscache
    *.sln.docstates
    
    # ...
    
    # Exceptions for entire subfolders
    !SetupFiles/elasticsearch-5.0.0/**/*
    !SetupFiles/filebeat-5.0.0-windows-x86_64/**/*
    
    # Exceptions for files in different levels
    !SetupFiles/kibana-5.0.0-windows-x86/**/*.suo
    !SetupFiles/logstash-5.0.0/**/*.suo
    

答案 8 :(得分:1)

由于Git 2.7.0 Git会考虑异常。从官方发布说明:

  
      
  • 稍等一下"!/ abc / def"覆盖之前的" / abc"那   出现在同一个.gitignore文件中,以便更容易表达   " / abc目录中的所有内容都被忽略,除了..."。
  •   

https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt

答案 9 :(得分:0)

这就是我的做法,在每个目录中都有一个 README.md 文件:

/data/*
!/data/README.md

!/data/input/
/data/input/*
!/data/input/README.md

!/data/output/
/data/output/*
!/data/output/README.md