我是一名独立开发人员,在本地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)
这将导致类似于镜像的正常推送,除了它不会删除源不存在的分支或非快进更新.
我想说这是一个完全可以接受的备份你的存储库的策略.它应该对存储库中的每个ref执行推送到您的原始远程.使其成为本地存储库的完整"镜像".
编辑:我刚刚在问题中看到了您的更新说明.似乎git正在将你的远程引用推送到远程本身以及其他所有内容.推送完成后,远程引用将更新以反映您刚刚推送到它.现在,这将与远程存储库过时,因此需要进一步推动.如果这不满足你.您可以删除此远程引用
git push:origin/mybranch
然后使用
git push --all
请记住,这不会推动您创建的任何新分支.
我要做的是:
设置仓库: git clone --mirror user@server:/url-to-repo.git
然后,当您想刷新备份时:git remote update
从克隆位置。
这将备份所有分支,包括稍后添加的新分支,尽管值得注意的是,被删除的分支不会从克隆中删除(对于备份来说可能是一件好事)。
从http://www.garron.me/en/bits/backup-git-bare-repo.html
归档时间: |
|
查看次数: |
30720 次 |
最近记录: |