保存git存储库中的任意目录层次结构

时间:2016-08-25 20:51:24

标签: git

我正在尝试使用一些.gitkeep文件在git repo中建立一个不断增长/缩小的目录层次结构,我希望有效地拥有一个.gitignore文件,该文件排除给定目录下的所有文件(.gitignore文件所在的位置除外).gitkeep文件除外。

目前我(在.gitignore的rpm目录中):

/*
!.gitignore
!.gitkeep

这不起作用,因为如果忽略.gitkeep文件所在的目录,我认为第3行将无效。

我见过类似的例子:

application/*
!application/language/

application/language/*
!application/language/gr/

但我希望维护的目录层次结构并不是非常静态,因此维护这个.gitignore文件会很乏味。

我真的希望尽可能简单的.gitignore文件忽略整个目录(递归)但允许.gitkeep文件存在于所述目录下的任何位置。这可能吗?

1 个答案:

答案 0 :(得分:0)

这是我的示例目录

.
├── app
│   ├── core
│   │   └── .gitkeep
│   ├── lang
│   │   ├── en
│   │   │   └── .gitkeep
│   │   ├── .gitkeep
│   │   ├── gr
│   │   │   ├── deep.txt
│   │   │   └── .gitkeep
│   │   └── more.txt
│   └── something.txt
├── .gitignore
└── .gitkeep
  

我真的希望尽可能简单的.gitignore文件忽略整个目录(递归)

完全忽略.gitignore

中的所有内容
*
  

但允许.gitkeep文件存在于所述目录下的任何位置。这可能吗?

没问题,只需强行添加

git add -f app/lang/en/.gitkeep

或者一次性添加所有内容

find . | grep .gitkeep | xargs git add -f

让我们看看

git status --ignored
On branch master

Initial commit

Changes to be committed:
  new file:   .gitkeep
  new file:   app/core/.gitkeep
  new file:   app/lang/.gitkeep
  new file:   app/lang/en/.gitkeep
  new file:   app/lang/gr/.gitkeep

Ignored files:
  .gitignore
  app/lang/gr/deep.txt
  app/lang/more.txt
  app/something.txt