我有一个客户使用我的应用程序及其 .git 存储库的本地副本,她用它来还原更改和测试补丁等。但是由于防火墙和其他规则,她没有简单的方法可以拉出具有最新更改的远程. 所以我想“让他们下载一个新的、完整的 .git 存储库压缩起来”。但是存储库是一个大妈妈,可以舒适地四处走动,所以我宁愿只给她发送一个压缩的 .git 增量更改(对象、引用等),以便在她的本地 .git 目录中解压缩。
根据文件时间戳,我尝试了以下工作流程(在我的软件中自动执行):
- 在她的 .git/objects 目录中获取最新的时间戳
- 从该时间戳开始的文件的 .git 目录创建一个 zip
- 电子邮件压缩文件
- 在客户的 .git 中解压缩 zip(如果某些文件被覆盖,则无关紧要)
git checkout -f master
(或他们需要的任何分支/标签)和git clean -d -f
它工作得很好,因为她的工作树和 .git 目录从未在本地修改,只是从一个分支签出到一个标签或其他什么。但是文件时间戳肯定是不可靠的......即它可能都touch
被一些备份或其他东西所编辑,所以我正在寻找一种更优雅的方式来使用某种提交来创建这个增量压缩包。
那么,如果我有来自客户本地 .git 的信息,我如何以编程方式创建我的 .git 目录的增量 zip 文件?我想这与 git 在内部以增量方式从远程拉取东西的做法非常相似。选择正确文件的算法是什么?如何确定来自客户存储库的基线提交以构建增量 zip?