2

我一直在寻找 git-bundles 作为一个选项,以使我的 2 个存储库(正在持续工作)彼此同步。

由于两者都是两个不同的地理位置,并且设置 VPN 也不是我打算使用捆绑包的选项..(还有其他更好的选择或方法吗?)

我在这里偶然发现了Jefromi 的回答。它很好地解释了事情。

但是,如果我正在处理多个分支并且我想全部更新它们,我该怎么做?

(答案使用 master 的基础,但使用 --branches 将再次复制捆绑中所有其他分支的完整历史记录。我只想更新/添加所有分支的提交)

4

1 回答 1

2

您可以创建新备份,同时排除先前备份中的内容:

git fetch ../backup.bundle
git bundle create ../newbackup.bundle ^backup/A ^backup/B A B C

在这里,您创建一个增量备份,其中包含分支的增量历史记录,A以及B新分支C

您可以在“使用 git bundle 进行增量备份,适用于所有分支”中详细了解该方法

我更喜欢使用上次备份日期的更简单方法:

cd myRepo
git bundle create mybundle-inc --since=10.days --all

可以备份“多一点”:当您使用增量备份时,不会导入重复的提交两次。

我制作了一个基于--sincesave_bundles的脚本。


在 Git 2.31(2021 年第一季度)中,“ git bundleman学习--stdin了从标准输入中读取其引用的选项。

参见江欣 ( )的提交 5bb0fd2提交 ce1d6d9提交 9901164 (2021 年 1 月 11 日) 。(由Junio C Hamano 合并 -- --提交 8b48981中,2021 年 1 月 25 日)jiangxin
gitster

bundle: 参数可以从标准输入读取

签字人:蒋欣

为了创建一个增量包,我们需要传递许多参数让man忽略一些已经打包的提交。 通过标准输入传递参数会更方便。 但是当前的实现不允许我们这样做。git-bundle

这是因为在创建 bundle 时 args 被解析了两次:

  • 第一次解析 args 是compute_and_write_prerequisites()通过运行git-rev-list命令在 bundle 文件中写入先决条件,如果为git-bundle.
  • setup_revisions()后来在运行时无法从标准输入读取任何内容create_bundle()

解决方案是通过删除整个函数compute_and_write_prerequisites()然后调用函数来解析 args 一次setup_revisions()
为了编写 bundle 的先决条件,将调用prepare_revision_walk()traverse_commit_list()
但是调用后prepare_revision_walk(),对象数组revs.pending是空的,下面的步骤不能用空的对象数组(revs.pending)正常工作。
因此,在调用后立即复制revstorevs_copy以备后用setup_revisions()

的副本revs_copy不是深度副本,它与 . 共享相同的对象revs
的对象数组revs已被清除,但对象本身仍被保留。
调用后对象的标志可能会改变prepare_revision_walk(),我们可以使用这些改变的标志,而无需像以前的实现那样调用man命令并解析其输出。git rev-list

例如:_

    # create bundle from stdin
    # input has a non-exist reference: "topic/deleted"
    cat >input <<-EOF &&
    ^topic/deleted
    ^$D
    ^topic/2
    EOF

    git bundle create stdin-2.bdl \
        --ignore-missing \
        --stdin \
        release <input
于 2014-07-28T06:24:13.973 回答