将时间戳和作者从 git 传播到文件系统

问题描述 投票:0回答:1

有些工具不了解git,但从文件系统读取所有者和修改时间。如果每个文件的所有者和上次修改时间的文件系统字段都使用来自 git 的作者和作者日期信息进行更新,则此类系统可能会隐式“git 感知”。有没有办法自动执行此操作?

我在网上和 Stack Overflow 上搜索了各种术语和同义词,但发现没有任何与这个方向无关的提及。

git file timestamp filesystems author
1个回答
0
投票

没有具体的方法来自动处理这个问题。 Git 专为作者或提交者可能是无法访问本地系统上的文件的外部各方(例如开源贡献者)的环境而设计。例如,即使在我的工作笔记本电脑上,也只有一个非系统用户(我),而我的同事也没有出现在用户数据库中(因为他们有自己的系统)。

即使所有作者都代表系统上的用户(Git 或文件系统不知道这一点),映射也不一定是微不足道或明显的,而且一般来说,更改所有权会带来很多安全风险文件的数量,这就是为什么这仅限于超级用户(或具有某些功能的用户)。

可以在文件系统中存储几乎任意的时间戳,但 Git 不会专门更新时间戳。相反,如果它需要写入文件,它就会写入,并且该文件会获取当前时间戳。这使得像 make 这样使用时间戳来确定要重建的内容的工具可以正确工作。

话虽如此,可以存储清单来设置所有权、权限、时间戳和其他元数据。大多数 BSD 上都可以找到最常见的工具之一,称为 

mtree

,并且存在于各种稍微不兼容的工具中。它有适用于其他操作系统的版本;例如,Debian 发布了

mtree-netbsd
您可以将清单与存储库中的其余数据一起存储,或者您可以编写一个脚本来根据 Git 历史记录生成输出,可能使用 

git rev-list

git diff-tree
来生成适当的条目。许多 mtree 实现允许每行记录格式,因此您可以使用标准 shell 脚本非常轻松地生成清单。但是,我不知道任何现有工具提供此功能,因此您需要自己编写它。
至少在理论上也可以使用 FUSE、9P 或 NFSv4 之类的东西将其公开为单独的文件系统,或者通过实现 SFTP 服务器(可以使用带有 SSHFS 的 FUSE 来安装)。这些将允许您仅使用裸存储库来公开文件系统。我已经实现了 9P 和 SFTP,这并不是太困难,但同样,我不知道有任何现有的工具可以实现这一点。我的建议是 FUSE 或 SFTP,因为至少在 Linux 上,9P 是基于内核的文件系统驱动程序,因此文件系统的任何故障(由于编码错误、底层资源不可用或其他原因)往往会导致进程挂起文件系统直到系统重新启动,这往往很不方便。

© www.soinside.com 2019 - 2024. All rights reserved.