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

Pan*_*ood 55 git

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

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

(如果有人想知道如何证明这一点 - 我实际上正在为我的所有"逻辑"项目 - mac上的音乐软件 - 创建一个git存储库 - 但我只想存储实际的项目文件*.logic)

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

建立:

mkdir temp
cd temp
mkdir testdir
cd testdir
touch include.foo
touch dontinclude.bad
cd..
git init
touch .gitignore
Run Code Online (Sandbox Code Playgroud)

将其粘贴到.gitignore中

# Ignore all
/*

# But not these files...
!.gitignore
!*.foo
Run Code Online (Sandbox Code Playgroud)

git状态

唯一没有跟踪的文件是.gitignore

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

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

这是我从中获取.gitignore文件的极其相似的问题.我正在使用git --version 1.7.7(也试过1.7.3) - .gitignore忽略所有文件,然后递归地允许某种类型的文件

cam*_*amh 112

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

这就是你想要的:

# Ignore everything
*
# Don't ignore directories, so we can recurse into them
!*/
# Don't ignore .gitignore and *.foo files
!.gitignore
!*.foo
Run Code Online (Sandbox Code Playgroud)

git add .使用此配置执行此操作时,您应该会发现只有.gitignore*.foo文件列为要提交的更改.

  • 我发现"不要忽略子目录"行以排除在.gitignore中递归工作.例如,我不想忽略目录栏/.为了做到这一点,在这个答案中显示的行之后,我只是添加```!bar/*```和```!bar/**/*```以及bar /及其子目录中的所有文件递归没有被忽视. (8认同)
  • 由于'unignore .gitignore'部分,我在Stackoverflow上找到了最好的gitignore答案 (3认同)