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

问题描述:

有已经类似于这样几个问题,但没有一个答案为我工作。的.gitignore忽略所有文件,然后递归允许*包含.foo

我想忽略我下面的资料库中的文件夹以外的所有带*包含.foo

(如果你想知道如何能够合理的文件 - 我其实是做一个Git仓库为我所有的“逻辑”项目 - 在Mac上的音乐软件 - 但我只想要存储实际的项目文件*。逻辑)

我要拼出来,所以我们都在同一块板上。 这是我做的,从头开始:

设置:

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

如果我输入“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

+0

等一下,你'GIT中添加.gitignore'和'git的承诺-m “添加gitignore”'? – Nic

你的问题是,在开始/*模式匹配在顶层的所有文件和目录 - 包括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列为被提交的修改文件。

+0

尽管如此,在我的现实世界版本中使用.logic文件,它神秘地不起作用。我重新创建了git repo,检查了一百万次,完全复制.gitignore,更改为.logic,查找。 -name“* .logic”返回堆的文件,但这个.gitignore忽略所有的* .logic文件...一些愚蠢的事情肯定会发生......当我最终破解它时可能值得跟进评论 – PandaWood

+0

@PandaWood:确保你没有'〜/ .gitconfig'中的'core.excludesfile'设置指向一个文件,该文件的模式会排除你的'* .logic'文件。 – camh

+0

我没有得到这个,但当我试图将这些.logic文件上载到DropBox时,我得到了一个提示,它失败了。另一个提示是,我添加了!* .txt到.gitignore,因为我有几个文本文件,并且他们开始出现在跟踪列表中,不用担心。所以逻辑“文件”(例如bla.logic)实际上是“软件包” - 您在Mac Finder中点击并选择“显示软件包内容” - 因此git中的* .logic无法正常工作......我怎么能将这些“文件”存储在git中,可能是我的下一个问题;-) – PandaWood