目录
- 起因
- `.gitkeep` 文件的作用
- 总结
起因
其实关于
经过同事的介绍,我发现其实
就是——使 Git 保留一个空文件夹!
说实话,这样的作用,有点出乎我的意料,因为,我以前其实也用过类似的东西。
众所周知,Git 是一个文件追踪系统,这也导致了 Git 的设计初衷是对文件进行追踪,所以,Git 不会追踪一个空目录。
但是,在某些情况下,我们确实是需要保留一些空目录的。例如:项目结构、项目脚手架等。
这时候,由于尚未对功能进行开发,所以某些目录下根本没有文件,如果我们不做任何措施直接将该 repo push 到远端的话,就会产生一个情况:空目录丢失!
为了解决这个问题,以前我的做法是在空目录下新建一个名为
而
到这里,其实这个文件已经算是解释清楚了,但是,为什么要叫
因为
关于这一点,其实我的同事在分享的时候已经说过了,她说
但是,为了搞清楚这个东西还有没有深层次的原因,我又亲自去搜索了一下。找到了以下的几篇文章:
What are the differences between .gitignore and .gitkeep?
.gitkeep
GITKEEP File Extension - What is a .gitkeep file and how do I open it?
What are .keep and .gitkeep used for in Git?
【译】什么是 .gitkeep ? .gitkeep 和 .gitignore 有什么区别?
一一翻看了这些文章后,我发现,大家对
这样看来,也并不是所有人都同意这个约定嘛??!
但是,建一个空文件这个想法还是得到了所有人的支持的,至于叫什么名字,好吧,大多数都叫
同时,在翻看这些文章的时候,我还看到一些文章中写了
对于这种想法,可能是我自己并不觉得两者之间有什么联系吧,也有可能是我之前用的是 please.delete.me ,现在看了 .gitkeep 的作用后,我理解得很透彻(自我感觉),所以我觉得这个东西完全没有解释的必要。
不过呢,为了让这篇文章更加完善或者说完整一点,我还是写一下我的理解吧!
.gitignore 为了使 Git 忽略某些文件,不对某些特定的文件进行跟踪。例如:.idea .vscode *.log 等。.gitkeep 为了使 Git 保留一个空目录而创建的一个起标识作用的无意义文件。
总结
.gitkeep 文件是创建在一个空目录下的标识性文件,其作用是为了使 Git 保留该空目录(在有了 .gitkeep 文件后就不是空目录了)。.gitkeep 文件的文件名是社区的一个约定,仅仅只是为了起到一个统一的目的,使开发者在看到该文件时就知道其作用。.gitkeep 文件和官方没有任何关系,并不是官方定义的 Git 的系统文件。.gitkeep 文件应该是一个目录下的唯一文件,当该目录下有了其他文件时,就应该删除.gitkeep 文件。.gitkeep 文件和.gitignore 文件没有任何关系;前者是为了使 Git 保留一个空目录,后者是为了使 Git 忽略某些指定的文件。.gitkeep 文件并不是强制规定,只是一个约定,完全可以用自己喜欢的方式,但.gitkeep 文件无疑是被大多数开发者所承认的一个约定或者说是最佳实践,推荐使用。