“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值得注意的是被删除的分支不会从克隆中删除(这对于备份来说可能是件好事)。
为什么不压缩.git
文件夹的副本并将其发送到另一台服务器?
本着与琥珀的回答相同的精神,你可以:
- 推送到使用
git bundle
创build的本地备份 - 将该唯一文件复制到远程服务器。