Git 2.2.x 无缘无故地更新旧包文件的时间戳



Git 2.2.0 和 2.2.1 似乎偶尔会修改旧.git/objects/pack/pack-*.pack文件的时间戳,没有充分的理由。

它只是更改时间戳;内容是相同的。

调试这很困难,因为它似乎很少进行更改。

在 2.2.0 之前的任何 Git 版本中,我从未见过这样的东西。发生了什么,我可以以某种方式修复它吗?由于无用的时间戳更新,我突然收到大量增量备份的更改。

Git 在磁盘上保留的信息比记录存储库中所有信息绝对必要的信息要多。保留不必要的信息以加速某些操作和/或避免重写文件。决定何时删除一些不必要的文件的算法使用包文件的修改时间作为决策过程的一部分(请参阅find_lru_pack)。因此,mtime 由 git 中的类似缓存的机制使用。 包文件的修改时间在 git 中更改而不修改文件(请参阅freshen_file函数),以帮助正确缓存并避免逐出可能再次使用的文件。

如果将freshen_file sha1_file修改为无操作,则不应修改 mtimes。但是,如果在垃圾收集发生时,使用与以前相同的数据写入新提交,这将使您面临潜在的数据丢失(感谢下面的评论指出这一点)。

另一种方法是备份 git 存储库本身(及其包文件),而是备份捆绑包

  • 首先,您可以创建存储库的增量捆绑包或完整捆绑包
  • 其次,一旦创建,捆绑包就是一个文件,非常容易备份/复制(比多个文件的 rsync 更不容易出错,有潜在的日期问题)。
  • 该过程很容易编写脚本(我的脚本执行增量或完整备份)

最新更新