.gitignore忽略所有文件,然后递归地允许* .foo

时间:2011-11-06 02:51:10

标签: git

已经有几个类似的问题,但没有一个答案对我有用。

我想忽略我的存储库下面的文件夹中的所有内容,但带有* .foo

的文件除外

(如果有人想知道如何证明这一点 - 我实际上是为我所有的“逻辑”项目制作了一个git存储库 - mac上的音乐软件 - 但我只想存储实际的项目文件* .logic)

我要把它拼出来,所以我们都在同一个盘子里。 这是我从头开始做的事情:

设定:

mkdir temp
cd temp
mkdir testdir
cd testdir
touch include.foo
touch dontinclude.bad
cd..
git init
touch .gitignore

将其粘贴到.gitignore

# Ignore all
/*

# But not these files...
!.gitignore
!*.foo

git status

唯一未跟踪的文件是.gitignore

如果我输入'git add'。 - 没有变化,只看到.gitignore,我的2个文件被忽略。

为什么这不起作用?如何更改上述程序以使其有效?

这是我从中获取.gitignore文件的极其相似的问题。 我正在使用git --version 1.7.7(也尝试过1.7.3) - .gitignore to ignore all files, then recursively allows files of a certain type

1 个答案:

答案 0 :(得分:108)

您的问题是,开头的/*模式匹配顶级的所有文件和目录 - 包括testdir,因此testdir内的所有内容都会被忽略。

这就是你想要的:

# Ignore everything
*
# Don't ignore directories, so we can recurse into them
!*/
# Don't ignore .gitignore and *.foo files
!.gitignore
!*.foo

使用此配置执行git add .时,您会发现只列出了.gitignore*.foo个文件作为要提交的更改。