.gitignore排除目录中的文件,但不排除某些目录

Mat*_*hew 97 git gitignore

application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用.当我克隆项目时,没有"application/cache"文件夹或"application/cache/folder"文件夹等...

我想如果缓存文件夹中的文件没有缓存但文件夹是,那么文件夹权限转移和存在.

mip*_*adi 216

Git不跟踪文件夹,只跟踪文件,因此如果忽略文件夹中的所有内容,Git将无法跟踪任何内容.您可以在添加.gitignore文件到每个目录(application/cache,application/cache/folder,application/cache/folder/onemorefolder/)包含以下内容:

*
!.gitignore
Run Code Online (Sandbox Code Playgroud)

然后,您可以添加这些目录,并且只.gitignore添加每个目录中的文件 - 但这意味着现在将跟踪目录(即,在克隆时创建).

  • 用于此目的的.gitignore文件可以为空. (7认同)
  • 更明智和更简单的是使用名为.gitkeep的文件,然后您不必在.gitignore文件中放置任何内容. (4认同)
  • @kevpie文件夹中还有其他文件,他不希望跟踪它们.如果.gitignore文件为空,则显然会跟踪这些文件. (3认同)
  • 如果文件夹被较高的.gitignore文件忽略,则它们可以为空。在这种情况下,它就是我的答案。 (2认同)

Kin*_*nch 22

Git不跟踪空目录.只需在要提交的文件夹中添加一些空占位符文件即可.

touch application/cache/.keep
git add -f application/cache/.keep
Run Code Online (Sandbox Code Playgroud)

对每个"空"文件夹也这样做.稍后您可以忽略这些文件,它们实际上只存在以确保git在克隆上创建这些目录.这些条目会.gitignore阻止跟踪文件夹中的其他文件(除非你强制它git add -f;).


Joe*_*rth 16

还有另一种可能更清洁的方法.而不是在您想要保留的文件夹中包含.gitignore文件.你可以把它放在root .gitignore中,如下所示:

application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*
!*.gitkeep
Run Code Online (Sandbox Code Playgroud)

现在只需创建空的.gitkeep文件并将其提交到上面列出的目录中.然后将使用这些.gitkeep文件跟踪该文件夹,但不会跟踪任何内容.

  • 或者只是`!*.gitkeep` :) (2认同)