我是一名独立开发人员,在本地 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
or .tar.bz2
档案,因为我希望备份成为可访问的工作副本。由于我的备份服务器已连接到网络并且始终处于开启状态,因此这是我在路上访问存储库的好方法。
您看到第二次推送某些内容的原因是--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/*
这将使普通推送类似于镜像,只不过它不会删除源中不存在的分支或进行非快进更新。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)