我很清楚 git 不适用于空目录(这里是更流行的 git 问题之一),但我想问是否有特定的理由或理由(如果可能的话是官方的)不跟踪目录。
我问是因为在某些情况下,目录本身可以拥有有意义的元数据。例如,如果使用粘性模式,目录的文件模式可能很重要。目录为空这一事实可能对应用程序很重要。
我很清楚 git 不适用于空目录(这里是更流行的 git 问题之一),但我想问是否有特定的理由或理由(如果可能的话是官方的)不跟踪目录。
我问是因为在某些情况下,目录本身可以拥有有意义的元数据。例如,如果使用粘性模式,目录的文件模式可能很重要。目录为空这一事实可能对应用程序很重要。
没有官方的理由。Git FAQ简单地指出:
没有人有足够的能力进行更改以允许空目录已经足够关心这种情况来补救它
Git 跟踪内容,文件夹/目录不是内容。尽管您是对的,但某些元数据可能对您来说很有趣。在这种情况下,建议将.gitignore
文件或其他一些无意义的文件添加到目录中,以提供 git 可以识别的内容。
这正是 Git 设计的工作方式。
在我曾经做过的一些 Web 项目中,我需要一个用于我的 php 的日志目录,这当然也忽略了 .log 文件,所以本质上我有一个空的日志目录,由于我的 vhost 设置,Apache 需要它才能正确运行。
在这种情况下,我添加了一个 readme.txt,里面什么都没有。
我确定您已经在另一个线程上遇到过这个答案,仍然值得一个链接:https ://stackoverflow.com/a/115992/662605
Git 是“愚蠢的内容跟踪器”。它的大部分设计都是基于“愚蠢”;也就是说,有一个相当简单(因此是通用的)内部表示,并依靠围绕它构建的工具来做任何花哨的事情。它也是为跟踪源代码而设计的;它的设计目的不是让您可以跟踪具有任意权限的任意目录树,因为这会使您陷入与跟踪源代码无关的一大堆问题(您是否存储用户和组 ID?名称?硬链接?xattrs ? 资源分叉? 等等)。
愚蠢的一部分只是跟踪文件的内容。它确实存储了一些元数据,这些元数据对于在 Unix 环境中处理源代码至关重要:符号链接和可执行位。人们签入的脚本足够多,您想要跟踪可执行位,因为否则每个人都必须实现它。但除了这两条元数据之外,Git 只跟踪文件的内容及其名称。
如果您有除此之外的用例,您应该创建自己的瓷器,包装现有的瓷器,或使用 Git 提供的扩展点,如钩子和属性。
如果您想要更丰富地跟踪权限和目录,我建议您使用像etckeeper这样的包装器。