0

如何确定自上一个 git 包创建以来是否已提交更改,而无需创建工作存储库、循环遍历每个分支并记录每个头部修订?

我发现 GIT 的不足之处之一是在企业中使用的适当备份支持。企业与开源开发的不同之处在于始终存在 1) 权威存储库和 2) 处理大量数据的备份系统。因此有动机 1) 非常频繁地备份和 2) 仅在有新更改时运行备份过程。我的问题是找到#2 的解决方案。

我正在使用git bundle创建我的档案,但我没有找到确定的方法来确定自上次备份以来是否已提交新更改。

自上一个捆绑包以来,我一直在尝试找到git rev-list列出新提交 ID 的选项组合,但没有成功。关于这个主题的查询显示了一个非常好的备份脚本,使用以下代码编写:

git -C "${path}" rev-parse --short=10 HEAD

用提交 ID 标记捆绑包。该解决方案不足以描述 git 存储库的快照,因为其他分支可能已更新,而上游存储库的 HEAD 修订版未更改。

我看过 using --max-age=<lastbackup epoch>,但很快发现开发人员可以在备份运行后推送较旧的更改,并且由于提交的日期没有改变,结果是它们比上次备份日期更早,并且因此不会触发备份。

到目前为止我最好的方法是:

git -C ${repo} rev-list -a --branches ${prev_commit}..HEAD

它确实从其他分支捕获了新的修订,但即使在对 HEAD 进行了更新的提交之后,它也会继续报告其他分支的修订。

我还没有开始研究增量备份,但我已经看到,为了验证一个,当我更喜欢只在我们的服务器上维护裸存储库时,我需要创建和管理一个工作存储库。

另外我会注意到我还没有找到 git branch 删除“*”的选项,所以它只会给我一个干净的脚本分支列表。

其他企业正在做什么来备份他们的存储库?

4

1 回答 1

0

你可以git -C "${path}" rev-parse --short=10 --branches改用。即使它显示fatal: Needed a single revision在输出的末尾,但它也可以显示每个更新分支的最新提交。

当您使用 git 进行版本控制时,您只需要 git 服务器或第三方托管服务器(如 github、bitbucket 等)来管理不同的版本。真的很方便又省时,不用管现在是什么版本。优点是提交历史不会丢失,因此您无需再进行归档。

于 2017-01-18T05:21:19.213 回答