【问题标题】:push vs. bundle vs. tar zcvf -- to backup entire local .gitpush vs. bundle vs. tar zcvf——备份整个本地 .git
【发布时间】:2011-10-05 20:01:39
【问题描述】:

我可以通过两步将本地 .git 推送到存储库来备份它:

git push --all ~/gitrepo
git push --tags ~/gitrepo

我可以使用git bundle 备份它。

我可以通过简单地复制整个目录或将其存档(压缩!)来备份它:

tar -zcvf gitrepo.tgz .git

并且可能有additional 方法来备份entire 本地.git。

现在的问题是它们是否真的等价? (比如logs子目录不推送)

git push 方法与git bundle 相比有哪些优势?

tar -zcvf 可以被认为是“完美的 git 备份”吗?

【问题讨论】:

    标签: git


    【解决方案1】:

    我使用 Git 包

    git bundle create /tmp/backup.git --all --tags --remotes
    

    你可以像repo一样接收它:

    cd myworktree
    git pull /tmp/backup.git
    

    还要看


    完整性,注释

    对于 complete 备份(git-rerere 缓存、存储、挂钩、配置文件的东西)我建议使用 rsync

    rsync -hxPavilyzH --stats --delete .git/ backup@remote:/repo/mirror.git/
    

    或者:

    【讨论】:

      【解决方案2】:

      关于tar:它保存了所有内容:配置(远程 URL)、引用日志等。如果您不小心在存储库中做了一些非常愚蠢的事情您的硬盘驱动器,您可能需要引用日志不久后崩溃。牵强附会,但tar 很简单,它可以做任何事情。使用tar 进行备份,使用git push 进行镜像。这些是不同类型的任务。

      关于压缩:我有一个 27M 的 git repo,几乎完全是纯文本,.tar.gz 是......也是 27M。这可不是一大笔节省。

      【讨论】:

      • 所有答案都很好:@VonC 向我介绍了--mirrorstash。 @sehe 澄清了bundle,并且您指出了 backupmirror 之间的区别(还有一个有趣的事实,即 git repo 已经处于压缩形式?)。所以只允许接受 1 个答案并且你的分数最少,所以我接受你的。 :)
      • 我使用 tar 进行 git 备份,但现在我想迁移其他服务器上的一些存储库,而未去皮的存储库给了我奇怪的错误。你们中有人遇到过这个错误吗?
      • 如果有人遇到奇怪的错误,例如 error: refs/remotes/origin/master does not point to a valid object!错误:在解压 repo 并尝试 git pull 后尝试使用不存在的对象编写 ref refs/heads/master,您应该检查您的 git 版本。显然,您需要至少 1.7.11 版本的 git,这将解决您的问题。
      • 仅供参考:如果您tar -zcvf gitrepo.tgz .git,您将不会备份任何未跟踪的文件——即尚未添加到 repo 的文件
      【解决方案3】:

      tar 方法是可行的,但它不会检查保存的 repo 的完整性:在您解压缩并尝试克隆或从中获取之前,您不会知道压缩的 repo 是否可以工作。

      我更喜欢 clone --mirror 方法(在生成的裸仓库中启用 reflogs)。
      然后增量备份是简单的推送。
      正如old thread 中所讨论的,备份前的git stash 可以让您保存更多(索引和工作树状态)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-04
        • 2017-02-18
        • 2020-01-16
        • 1970-01-01
        • 1970-01-01
        • 2014-09-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多