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

Tho*_*mas 52 git backup

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

这样做是否足够?

git push --mirror
Run Code Online (Sandbox Code Playgroud)

我问,因为在Git告诉我"一切都是最新的"之前,我有时可以运行这个命令两到三次,所以显然它不是一个精确的镜子.它似乎正在重新推动跟踪分支......?

$ 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
Run Code Online (Sandbox Code Playgroud)

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

编辑:我不喜欢使用类似git bundle.tar.bz2档案的东西,因为我希望备份是一个可访问的工作副本.由于我的备份服务器已连接到网络并始终打开,因此在我上路时这是访问存储库的好方法.

Jak*_*org 31

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

这会导致你看到的陌生感,当你从那个遥控器拉出时,也会产生更加陌生的感觉; 你会得到一个名为origin/origin/mybranch等的分支.因此,通常最好使用--mirror一次副本,并使用正常推送(可能与--all)正常使用.

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

[remote "origin"]
  url = ...
  fetch = ...
  push = +refs/heads/*
  push = +refs/tags/*
Run Code Online (Sandbox Code Playgroud)

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


nsc*_*hum 24

不幸的是,你没有得到推送的精确副本.你失去了藏匿处.

  • 谢谢,很高兴知道.然而,这并不重要,因为无论如何,藏匿被认为是一个非常短暂的事情. (5认同)
  • 如果你在任何时间保持藏匿,也许你需要更加舒适的分支(: (5认同)
  • 是的,我认为这对备份来说已经足够了,但不适合同步.此外,我们都知道有多长时间我们依赖所谓的短期事物.;) (2认同)

Gre*_*ton 8

我想说这是一个完全可以接受的备份你的存储库的策略.它应该对存储库中的每个ref执行推送到您的原始远程.使其成为本地存储库的完整"镜像".

编辑:我刚刚在问题中看到了您的更新说明.似乎git正在将你的远程引用推送到远程本身以及其他所有内容.推送完成后,远程引用将更新以反映您刚刚推送到它.现在,这将与远程存储库过时,因此需要进一步推动.如果这不满足你.您可以删除此远程引用

git push:origin/mybranch

然后使用

git push --all

请记住,这不会推动您创建的任何新分支.

  • 另外值得了解的是使用--mirror选项克隆存储库,然后使用'git remote add --mirror <name> <url>'.这将自动镜像,因此您应该只能运行'git push'. (5认同)

fan*_*ous 5

我要做的是:

设置仓库: git clone --mirror user@server:/url-to-repo.git

然后,当您想刷新备份时:git remote update从克隆位置。

这将备份所有分支,包括稍后添加的新分支,尽管值得注意的是,被删除的分支不会从克隆中删除(对于备份来说可能是一件好事)。

http://www.garron.me/en/bits/backup-git-bare-repo.html