如何确定自上一个git捆绑包创建以来是否已提交更改,而不创建工作存储库,循环通过每个分支并记录每个head修订?
我发现GIT的一个缺点是为在企业中使用提供适当的备份支持。企业与开源开发的不同之处在于,它总是有1)权威存储库和2)处理大量数据的备份系统。因此,有动机1)非常频繁地备份,2)只有在有新的更改时才运行备份过程。我的问题是为#2找到解决方案。
我正在使用git bundle
创建我的档案,但我没有找到一种决定性的方法来确定自上次备份以来是否提交了新的更改。
自上一个捆绑包以来,我一直在尝试为git rev-list
找到一个选项组合,以列出新的提交ID,但都没有成功。关于这个主题的查询显示了一个非常好的备份脚本,它是用编写的
git -C "${path}" rev-parse --short=10 HEAD
用提交id标记捆绑包。该解决方案不充分地描述了git存储库的快照,因为其他分支可能已经更新,而上游存储库的HEAD版本没有改变。
我研究过使用--max-age=<lastbackup epoch>
,但很快发现,开发人员可以在备份运行后推送旧的更改,而且由于提交的日期不会更改,结果是它们比上次备份日期早,因此不会触发备份。
到目前为止,我拥有的最好的方法是:
git -C ${repo} rev-list -a --branches ${prev_commit}..HEAD
它确实捕获了来自其他分支的新修订,但即使在向HEAD进行了新的提交之后,它也将继续报告其他分支的修订。
我还没有开始研究增量备份,但我已经看到,如果我只想在服务器上维护裸存储库,那么为了验证增量备份,我需要创建和管理一个工作存储库。
此外,我要注意的是,我还没有找到git分支删除"*"的选项,所以它只会给我一个干净的分支列表,用于脚本编写。
其他企业在备份其存储库方面做了什么?
您可以改用git -C "${path}" rev-parse --short=10 --branches
。即使它在输出的末尾显示fatal: Needed a single revision
,但它也可以显示每个更新分支的最新提交。
当你使用git进行版本控制时,你只需要git服务器或第三方托管服务器(如github、bitbucket等)来管理不同的版本。它真的很方便,节省时间,而且你不需要关心现在的版本。其优点是提交历史记录不会丢失,因此这样您就不需要再进行归档了。