我一直在寻找 git-bundles 作为一个选项,以使我的 2 个存储库(正在持续工作)彼此同步。
由于两者都是两个不同的地理位置,并且设置 VPN 也不是我打算使用捆绑包的选项..(还有其他更好的选择或方法吗?)
我在这里偶然发现了Jefromi 的回答。它很好地解释了事情。
但是,如果我正在处理多个分支并且我想全部更新它们,我该怎么做?
(答案使用 master 的基础,但使用 --branches 将再次复制捆绑中所有其他分支的完整历史记录。我只想更新/添加所有分支的提交)
我一直在寻找 git-bundles 作为一个选项,以使我的 2 个存储库(正在持续工作)彼此同步。
由于两者都是两个不同的地理位置,并且设置 VPN 也不是我打算使用捆绑包的选项..(还有其他更好的选择或方法吗?)
我在这里偶然发现了Jefromi 的回答。它很好地解释了事情。
但是,如果我正在处理多个分支并且我想全部更新它们,我该怎么做?
(答案使用 master 的基础,但使用 --branches 将再次复制捆绑中所有其他分支的完整历史记录。我只想更新/添加所有分支的提交)
您可以创建新备份,同时排除先前备份中的内容:
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
可以备份“多一点”:当您使用增量备份时,不会导入重复的提交两次。
我制作了一个基于--since
:save_bundles的脚本。
在 Git 2.31(2021 年第一季度)中,“ git bundle
” (man)学习--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
)正常工作。
因此,在调用后立即复制revs
torevs_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