我只为文本文件创建了一个白名单.
*
!*.txt
Run Code Online (Sandbox Code Playgroud)
现在,我在子目录中有一个未跟踪的文本文件 - sub/dir/file.txt
并且未显示(忽略它).但是,会显示根目录中的文本文件.
为什么会这样,我该如何解决?
sim*_*ont 124
如果你这样尝试,它就会失败,因为你最终会将结构中的目录列入黑名单.
要解决此问题,您希望将不是目录的所有内容列入黑名单,并且不是要提交的文件类型之一,而不是将目录列入黑名单.
.gitignore
将执行此操作的文件:
# First, ignore everything
*
# Now, whitelist anything that's a directory
!*/
# And all the file types you're interested in.
!*.one
!*.two
!*.etc
Run Code Online (Sandbox Code Playgroud)
.txt
在存在的文件的三级结构白名单中测试了这个*.one
,*.two
并且*.three
使用.gitignore
位于存储库的根目录中的文件 - 对我有用.您不必将.gitignore
文件添加到结构中的所有目录.
我用来找出答案信息的来源,除其他事项外,本(stackoverflow.com).
实现这一目标的更简单方法是:
# Ignore all files...
*.*
# ...except the ones we want
!*.txt
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为gitignore
将不以开头的模式应用于文件/
下的每个级别.gitignore
:
如果模式的开头或中间(或两者)有分隔符,则模式是相对于特定 .gitignore 文件本身的目录级别的。否则模式也可能在低于 .gitignore 级别的任何级别匹配。
如果您想对目录中的文件执行此操作,事情会变得更加复杂:
# Ignore all files in all directories inside subdir...
/subdir/**/*.*
# ...except the ones we want
!/subdir/**/*.txt
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为gitignore
有以下特殊规则**
:
**
与完整路径名匹配的模式中的两个连续星号 (" ") 可能具有特殊含义:
- 斜杠后跟两个连续的星号,然后斜杠匹配零个或多个目录。例如,“
a/**/b
”匹配“a/b
”、“a/x/b
”、“a/x/y/b
”等。
关键是确保您不要忽略目录,因为无论其他规则如何,该目录中的每个文件都会被忽略。