为什么不git版本目录?

时间:2012-11-27 18:32:35

标签: git

我很清楚git不适用于空目录(这里是一个比较流行的git问题),但是我在问跟踪目录是否有一个特定的理由或理由(如果可能的官方)。

我问,因为目录在某些情况下可以自己拥有有意义的元数据。例如,如果使用粘滞模式,则目录的文件模式可能很重要。目录为空的这一事实对于应用程序而言可能很重要。

3 个答案:

答案 0 :(得分:11)

没有正式的理由。 Git FAQ只是声明:

  

没有人能够进行更改以允许空目录   我已经足够关注这种情况来补救它

答案 1 :(得分:4)

Git跟踪内容,文件夹/目录不是内容。虽然你是对的,但一些元数据对你来说可能很有趣。在这种情况下,建议将.gitignore文件或其他无意义的文件添加到目录中,以便提供git将识别的内容。

请参阅How can I add an empty directory to a Git repository?

这就是Git的工作方式。

在我曾经做的一些Web项目中,我需要一个日志目录,我的php当然也忽略了.log文件,所以本质上我有一个空的日志目录,由于我的Apache需要正确运行虚拟环境设置。

在这种情况下,我添加了一个内部没有任何内容的readme.txt。

我确定你已经在另一个帖子上遇到了这个答案,仍然值得链接:https://stackoverflow.com/a/115992/662605

答案 2 :(得分:4)

Git是“愚蠢的内容追踪器”。它的大部分设计都是基于“愚蠢”;也就是说,拥有一个相当简单(因此一般)的内部表示,并依靠围绕它构建的工具来做任何奇特的事情。它也仅用于跟踪源代码;它的设计不允许您使用任意权限跟踪任意目录树,因为这会让您陷入与跟踪源代码无关的问题的整个问题(您是否存储用户和组ID?名称?硬链接?xattrs ?资源分叉?等等。)

愚蠢的一部分就是跟踪文件的内容。它确实存储了一些在Unix环境中处理源代码所必需的元数据:符号链接和可执行位。有足够的脚本供人们检查,你想跟踪可执行位,因为否则每个人都必须实现它。但除了这两个元数据之外,Git只是跟踪文件的内容及其名称。

如果你有超出范围的用例,你应该创建自己的porcelain,包装现有的,或使用Git提供的扩展点,如hooks和{{3} }。

如果您想要更丰富地跟踪权限和目录,我建议使用像attributes这样的包装器。