你走了:
root@Dell: /tmp # mkdir test; cd test
root@Dell: /tmp/test # git init
Initialized empty Git repository in /tmp/test/.git/
root@Dell: /tmp/test # mkdir foo
root@Dell: /tmp/test # touch foo/a
root@Dell: /tmp/test # git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# foo/
nothing added to commit but untracked files present (use "git add" to track)
root@Dell: /tmp/test # cat > .gitignore << EOF
> *
> !foo/
> EOF
root@Dell: /tmp/test # git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
任何人都可以解释为什么空.gitignore
不等同于:
*
!foo/
在这种情况下?
答案 0 :(得分:4)
您设法使目标foo
“未被忽略”,但foo
中的所有内容仍然与“*
”模式匹配。
这将删除gitignore'foo
'初始指令中的*
内容:
*
!/foo/
!/foo/*
或:
*
!/foo/
加上.gitignore
中的foo
,其中包含:
!*
答案 1 :(得分:1)
模式*
将匹配工作树中的任何位置,包括匹配名为foo
的目录中的任何文件。
查看您的树,您可能想要做的只是匹配树顶层的所有entites,但名为foo
的目录除外,因此仍会跟踪foo
下的任何内容默认情况下。
/*
!foo/
将第二个模式也植根在工作树的根部也是有意义的。
/*
!/foo/