我是一名独立开发人员,在本地 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/