我最近开始使用Git。 我发现的一个有趣的功能是使用哈希来快速检测变化。
另一方面,我看到构建工具(如make,ant,javac等)尝试通过检查文件的时间戳来检测源文件中的更改。
这种方法存在的问题是:
我想知道是否有人已采用Git方法来处理这些问题:
这种机制可以帮助使构建工具更快,因为检测源树中的更改是一种简单的哈希比较操作。如果源树根目录的哈希值发生了变化,则意味着源树中发生了更深层次的更改,因此继续以递归方式扫描树以查找更改 - 正如Git检测更改一样。
这并不一定意味着这个源代码树必须由Git管理。 我的想法是文件系统会自动提供文件的哈希代码作为其属性/元数据之一,因此构建工具可以依赖于此而不是时间戳。此外,目录哈希会自动反映其中的文件状态。
我已经阅读了一些关于Sun的ZFS的内容,但我不确定这是一个让构建更快的完整解决方案。
您如何看待这个想法? 有没有这样的文件系统? 是否有这样的构建工具?
答案 0 :(得分:2)
我认为你想要解决的问题实际上是一个非问题:
使用NTP可以避免时钟偏差问题。
当然,完全消除时钟偏差问题会很好,但我们可能会同意在这个问题上投入一个相当复杂的内容跟踪系统是过度的。
关于性能,扫描整个树在实践中往往不是问题。 stat
速度非常快(只要你不在Windows上) - ls -lR > /dev/null
整个Linux内核树(38k文件)在我的系统上需要350毫秒。
事实上,如果对所有文件进行统计是一个问题,那么您的版本控制系统将变得缓慢,这将是一个比您的构建性能更大的问题。例如,每个git status
或git diff
工作副本中的统计信息所有文件都会检查他们的时间,因此您最好希望速度很快。
因此,如果您希望加快make
,请不要查看文件系统;与实际占用你的构建时间的东西相比,它很可能是微不足道的。
希望能让你放松心情!