gpt4 book ai didi

git - 使用 fetch 而不是 push 备份 git 存储库

转载 作者:太空狗 更新时间:2023-10-29 13:41:55 27 4
gpt4 key购买 nike

如果您的 git 版本太旧而无法从您的 gitolite 服务器支持 git push --mirror 是否可以通过首先 git clone --bareing 来模拟该功能新的存储库,然后在备份服务器上使用 git fetch refs/*:refs/*?您也可以将 *:* 指定为 refspec 吗?由于 gitolite 服务器上的存储库是裸存储库,因此 fetch 命令是否无法获取仅在您有工作目录时使用的对象并不重要。

我的恢复策略是希望在当前服务器崩溃时将备份服务器的 $BACKUPDIR 的内容复制到新的 gitolite 服务器。在这种情况下,它也会按预期工作吗?

最佳答案

如果不安装旧版本的 git 并检查解决方案是否真的适用于这个版本,这个问题有点难以回答。 (无论如何我都不知道你对哪个版本感兴趣。)也就是说,我会尝试给出一些尝试的提示,你可以自己检查它是否适合你。

  1. 当您实际想要模拟 git fetch 时,我看不出有任何理由使用 git push 而不是 git push --mirror

  2. 可以使用 *:* 作为 refspec(至少在最新版本的 git 中)。这与 : 不同,因为后者只选择存在于两个存储库中的分支,而前者选择发送站点上的所有分支并将它们发送到接收站点,并在必要时在那里创建新分支(这对两者都适用,fetchpush)。

  3. 单个命令中最接近 git push --mirror $REMOTE 的近似值可能是

    git push -f $REMOTE *:*

    与“真实”的不同之处在于它从不删除远程端的分支。您可以忽略它——无论如何它可能是一个非常合理的备份——或者您可以破解一些代码以手动删除它们。这是我的(非常糟糕的)尝试:

    git ls-remote $REMOTE refs/* | cut -f 2 > remote-branchesgit show-ref | cut -d " " -f 2 > local-branchesgit push --delete $(join -v 1 remote-branches local-branches)

    我确实认为这种尝试存在根本性缺陷——使用风险自负。无论如何,它可能不适用于旧版本的 git。 (令我惊讶的是 git show-ref 使用空格作为字段分隔符,而 git ls-remote 使用制表符作为相同类型的输出。)

关于git - 使用 fetch 而不是 push 备份 git 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4275014/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com