“git push –mirror”足以备份我的存储库吗?

我是一个独立开发者,在本地的Git仓库中工作。 对于备份,我想将该存储库的确切副本发送给另一台服务器。

这样做足够了吗?

git push --mirror 

我在问,因为在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 

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

编辑:我不喜欢使用像git bundle.tar.bz2档案,因为我想备份是一个可访问的工作副本。 由于我的备份服务器连接到networking,并始终打开,所以当我在路上时,这是访问存储库的好方法。

我会说这是一个完全可以接受的策略来备份你的仓库。 它应该对存储库中的每个ref执行一次远程启动。 使其成为本地存储库的完整“镜像”。

编辑:我刚才看到你的问题更新的描述。 看来git正在推动你的远程参考遥控器本身以及其他一切。 一旦推完成,远程参考将被更新,以反映你刚刚推。 现在,远程存储库已经过期,因此需要进一步推进。 如果这不能满足你。 你可以删除这个远程参考

git push:origin / mybranch

然后使用

git push –all

记住,这不会推动你创build的任何新的分支。

你第二次看到某些东西的原因是 – --mirror比你--mirror的要多一点。 除了你当地的分支,它也推动你的远程分支,因为镜子隐含着一切 。 所以,当你正常推动(或使用 – --mirror ), mybranch被推动和origin/mybranch更新,以反映origin/mybranch的新状态。 当你用--mirror推送时, origin/mybranch也被推送。

这会导致你所看到的陌生,当你从遥远的地方拉下来时,也会变得更加奇怪。 你会得到名称为origin/origin/mybranch等的分支。所以通常最好使用--mirror一次拷贝,只需使用普通的push(可能用--all )来正常使用。

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

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

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

不幸的是,你没有得到与推的确切副本。 你失去了你的藏身处

我通常使用git push --all 。 我只使用 – 镜像时,我需要推新创build的分支机构,或者我删除了一些分支机构,不想一一命名。 否则, push --all通常工作,因为我需要。

我所做的是:

设置回购: git clone --mirror user@server:/url-to-repo.git

然后,当你想刷新备份:克隆位置的git remote update

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

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

为什么不压缩.git文件夹的副本并将其发送到另一台服务器?

本着与琥珀的回答相同的精神,你可以:

  • 推送到使用git bundle创build的本地备份
  • 将该唯一文件复制到远程服务器。