首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git防止.pack文件日期/时间修改

Git防止.pack文件日期/时间修改
EN

Stack Overflow用户
提问于 2017-12-21 05:17:47
回答 3查看 305关注 0票数 5

我正在使用Git for Windows (版本2.15,但在2.14版本中也会出现同样的问题,我认为旧版本也是如此),并且我注意到了一个相当恼人的行为:当我执行一些基本的git操作*时,修改.git/objects/pack/pack-*.pack文件的日期就会改变。文件本身保持不变,但是最后一个修改日期字段被更新,这导致我的备份软件认为文件已经更改,需要添加到我的差异备份中。因为我的.pack文件相当大,这大大增加了我每天备份的大小。有办法阻止这种行为吗?也就是说,在我执行git或git之前,包文件(包括其元数据)保持完全不变吗?

不幸的是,我无法确定是哪个操作导致了这种行为。今天发生时,我只使用git状态、git日志、git add、git mv和git commit,其他任何内容以及日期/时间都没有更改,但当我试图在昨天的备份上复制该行为时,日期更改没有发生。我想下一次我将运行Process并观察对文件的访问,但是与此同时,有没有人知道是什么原因导致了这个问题呢?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-21 09:24:15

如果您试图禁用它,那么您将很容易看到一些微妙的bug,其中仍在使用中的对象将从您的存储库中消失。

您很难精确定位确切的操作,因为每个添加文件的操作都会完成。

这在很大程度上是有意的-- Git刷新数据库中对象的时间戳(更新松散对象或包文件上的时间戳),以了解对象上次编写的时间。每当您创建新提交时,它都将更新包含引用对象的所有文件的时间戳。

这一点很重要,因为它帮助删除数据的工具(如prune)避免竞争条件:对象可能被取消引用,然后重新引用。Prune还将查看时间戳,因此,通过触摸文件,它将不符合垃圾收集的条件。

票数 1
EN

Stack Overflow用户

发布于 2017-12-21 06:00:06

与其引用Git回购本身以供备份程序处理(使用日期问题),您还可以:

  • 执行 of your repo (只生成一个文件)的任务
  • 您的备份程序只会备份这一个文件。

这样,您就可以完全绕过那些包文件的修改日期问题。

您可以保存并只保留一份完整的回购包的副本。

或者做增量的捆绑。

票数 2
EN

Stack Overflow用户

发布于 2018-02-19 17:23:48

最后,爱德华·汤姆森的回答解释了为什么不可能有“真正的”解决方案。但是,为了满足我的需要,我编写了一个简单的Windows命令行应用程序,它通过目录树进行扫描,查找可能的Git存储库,定位它们的包文件,并将每个.pack文件的日期/时间更改为相应的.idx文件的日期/时间。到目前为止,它似乎运行良好。无论如何,我还没有遇到任何垃圾收集问题。我还没有发布这个工具,因为我很怀疑没有人在乎,但是如果有人感兴趣,我可以把它上传到某个地方。

显然有人对此感兴趣。所以这个程序现在已经发布了。不是在GitHub上,而是在3条款的BSD许可下作为开放源码.下载二进制文件在这里:https://www.pepak.net/files/git/gitpacksync-0.01.zip和源代码在这里:https://www.pepak.net/files/git/gitpacksync-0.01-source.zip

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47918373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档