git - "git push --mirror"是否足以备份我的存储库?

标签 git backup

我是一名独立开发人员,在本地 Git 存储库中工作。对于备份,我想将该存储库的精确副本发送到另一台服务器。

这样做就足够了吗?

git push --mirror

我问是因为有时我可以在 Git 告诉我“一切都是最新的”之前运行这个命令两到三次,所以显然它不是一个精确的镜像。好像是在重新推送tracking branches...?

$ git push --mirror
Counting objects: 42, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (30/30), done.
Writing objects: 100% (30/30), 5.09 KiB, done.
Total 30 (delta 17), reused 0 (delta 0)
To ssh://my/repo/url
   c094a10..0eedc92  mybranch -> mybranch
$ git push --mirror
Total 0 (delta 0), reused 0 (delta 0)
To ssh://my/repo/url
   c094a10..0eedc92  origin/mybranch -> origin/mybranch
$ git push --mirror
Everything up-to-date

发生了什么,这是一个好的策略吗?

编辑:我不喜欢使用 git bundle.tar.bz2 存档,因为我希望备份是一个可访问的工作副本.由于我的备份服务器已连接到网络并且始终处于开启状态,因此这是我在旅途中访问存储库的好方法。

最佳答案

您第二次看到某些东西被推送的原因是 --mirror 推送的比您预期的多一点。除了您的本地分支之外,它还会推送您的远程分支,因为镜像意味着一切。因此,当您正常推送(或使用 --mirror)时,将推送 mybranch 并更新 origin/mybranch 以反射(reflect) origin 的新状态.当您使用 --mirror 推送时,origin/mybranch 也会被推送。

这会导致您看到奇怪的东西,并且当您从那个 Remote pull 出时也会导致更奇怪的东西;你会得到名为 origin/origin/mybranch 等的分支。所以通常最好使用 --mirror 进行一次复制,并且只使用普通推送(可能与 --all) 用于正常使用。

要始终推送所有分支和标签,您可以像这样更新 .git/config:

[remote "origin"]
  url = ...
  fetch = ...
  push = +refs/heads/*
  push = +refs/tags/*

这将进行类似于镜像的正常推送,除了它不会删除源中不存在的分支或非快进更新。

关于git - "git push --mirror"是否足以备份我的存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3333102/

相关文章:

git - 如何替换git存储库?

backup - 什么是备份(也许同步)你的开发机器的好方法?

PostgreSQL 错误 : geometry contains non-closed rings

c# - 复制到 Dropbox 文件夹时修改 LastWriteTime

git - 将一个 git 存储库复制到另一个具有历史记录的存储库

git - 如何安装官方 Git 安装附带的子树?

git - 未知开关 'm' 与 git 别名提交

git - Git-SSH服务器-文件未出现在服务器上

mysql - 备份MySQL数据库到远程服务器

windows - hg pull 是否只对当前工作目录进行操作?