我有一个gitignore文件,它使git忽略*.dll
个文件,这实际上是我想要的行为。但是,如果我想要一个例外(即能够提交foo.dll
),我该如何实现呢?
答案 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/
答案 4 :(得分:14)
只需在排除规则之前添加!
。
模式具有以下格式:
...
- 可选前缀!否定了这种模式;之前模式排除的任何匹配文件将再次包含在内。如果否定模式匹配,则将覆盖较低优先级模式源。
答案 5 :(得分:5)
!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规则和例外规则之间的关系:
不同级别的文件/文件或文件/子文件夹:您可以这样做:
*.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