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

时间:2011-04-08 20:47:26

标签: git gitignore

application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*

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

我想如果缓存文件夹中的文件没有被缓存但文件夹是,那么文件夹权限就会传输并存在。

5 个答案:

答案 0 :(得分:210)

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

*
!.gitignore

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

答案 1 :(得分:22)

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

touch application/cache/.keep
git add -f application/cache/.keep

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

答案 2 :(得分:14)

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

application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*
!*.gitkeep

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

答案 3 :(得分:3)

你可以在每个文件中放一个.gitignore文件(比如mipadi说)或者在你的root .gitingnore文件上做类似的东西

/assets/*/
/assets/*.*

它适用于我

答案 4 :(得分:1)

Visual Studio不喜欢接受的答案。我必须在*之前添加一个新行才能使其正常工作。

# Ignore all files in this folder.
*
!.gitignore