已经有几个类似的问题,但没有一个答案对我有用。
我想忽略我的存储库下面的文件夹中的所有内容,但带有* .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
答案 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
个文件作为要提交的更改。