392

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

4

11 回答 11

537

采用:

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

gitignore

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

于 2010-07-08T11:55:30.457 回答
335

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

/js

但如果你这样做,它不能添加例外: !/js/jquery!/js/jquery/!/js/jquery/*

你必须写:

/js/* 

只有这样你才能排除这样的子文件夹

!/js/jquery
于 2013-02-06T14:33:51.967 回答
63

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

.gitignore只忽略通常跟踪的文件和类似的东西git add .

于 2010-07-08T11:56:14.803 回答
22

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

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

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

于 2012-05-03T17:13:08.980 回答
15

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

根据gitignore 手册页

模式具有以下格式:

...

  • 一个可选的前缀!这否定了模式;任何被先前模式排除的匹配文件都将再次包含在内。如果否定模式匹配,这将覆盖较低优先级的模式源。
于 2010-07-08T11:55:05.993 回答
5

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

于 2010-07-08T11:58:51.417 回答
5

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

!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]/模式。

于 2017-05-01T04:45:08.430 回答
4

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

  1. 同一级别的文件/文件:使用@Skilldrick 解决方案
  2. 文件夹/子文件夹:使用@Matiss Jurgelis 解决方案
  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
    
于 2016-11-09T20:44:16.757 回答
1

从 Git 2.7.0 开始,Git 会考虑异常。来自官方发布说明:

  • 允许后面的 "!/abc/def" 覆盖出现在同一个 .gitignore 文件中的较早的 "/abc",以便更容易表达“/abc 目录中的所有内容都被忽略,除了 ...”。

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

编辑:显然这不再适用于 Git 2.8.0

于 2016-01-06T01:48:03.153 回答
0

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

/data/*
!/data/README.md

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

!/data/output/
/data/output/*
!/data/output/README.md
于 2021-01-29T23:21:33.840 回答
0

如果您有一个目录并且想要忽略除某些文件(例如*.py文件)之外的所有内容,您可以执行以下操作:

sub-dir/**/*.*
!sub-dir/**/*.py
于 2021-09-17T23:13:55.203 回答