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

已经有几个类似的问题,但没有答案为我工作。

我想忽略文件夹下面的文件夹中的所有内容,除了带有* .foo的文件

(如果有人想知道这是如何合理的 – 我实际上是为我所有的“逻辑”项目制作git仓库 – mac上的音乐软件 – 但我只想存储实际的项目文件* .logic)

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

build立:

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状态

而唯一未跟踪的文件是.gitignore

如果我input“git add”。 – 没有改变,只有.gitignore被看到,我的2个文件被忽略。

为什么这不起作用,你怎么能改变上面的程序,使其工作?

这里是我得到.gitignore文件的极其类似的问题。 我使用git –version 1.7.7(也试过1.7.3) – .gitignore忽略所有文件,然后recursion地允许某种types的文件

你的问题是,开头的/*模式匹配顶层的所有文件和目录 – 包括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 . 使用这个configuration,你会发现你只有.gitignore*.foo文件被列为要提交的更改。