【问题标题】:How to determine when an upstream git repository has been modified - for creating backups如何确定上游 git 存储库何时被修改 - 用于创建备份
【发布时间】:2023-03-09 23:26:01
【问题描述】:

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

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

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

我一直在尝试寻找git rev-list 的选项组合,以列出自上次捆绑以来的新提交 ID,但没有成功。对该主题的查询显示了一个非常漂亮的backup script,使用以下代码编写:

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 branch 的选项来删除“*”,所以它只会给我一个干净的脚本分支列表。

其他企业如何备份其存储库?

【问题讨论】:

  • 您使用的是 GitHub 或 Bitbucket 等 Git 提供程序吗?这两个都在幕后备份您的数据 AFAIK。
  • 不评论备份策略,我会注意到git rev-list 是错误的工具。使用git for-each-ref 获取部分或全部引用的当前值。
  • @TimBiegeleisen 不能使用服务提供商。想想企业、IP 等。
  • @torek 这看起来不错,它也捕获标签吗?
  • @btpw: git for-each-ref 对所有引用(分支、标签、存储、注释、远程跟踪分支、来自过滤器分支的refs/original/ 等)或您指定的引用进行操作。如果您想要标签,请在refs/tags 上运行它。详细阅读文档;对于标签,您可能不仅需要标签对象,还需要标签对象的非标签目标对象 ID。

标签: git version-control backups


【解决方案1】:

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

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

【讨论】:

  • 请注意,--branches 将获取每个分支名称的当前对象 ID(这些 OID 必须是提交),但不会获取标签的 OID(这些可能是带注释的标签,因此您可能需要两个标签 OID 和剥离的标签 OID)。如果您的目标真的是保存一切,您应该考虑标签可以保护没有分支名称保护的对象这一事实。 (例如,您可能会将标记指向包含基本 GPG 签名的 blob。)您可能还关心注释,它们是不在分支名称空间中的提交。
  • 谢谢,但我正在寻找一个企业解决方案,因此不能选择使用 github 或 bitbucket 服务。这些服务如何提供 git repos 的备份,还是仅仅依赖于通用磁盘(网络设备)备份?
  • 如果使用github或bitbucket,则无需备份。他们将存储库存储在他们的服务器上。用户需要做的是将 repo 克隆到本地并根据需要签出到不同的版本。
猜你喜欢
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 2018-06-26
相关资源
最近更新 更多