git fetch 能否用来备份仓库?

4 天前
 7164447205

备份仓库有什么好方法?

起初,我用 git bundle 来备份仓库,但是空间消耗太快,我想尽可能节省空间。

后来发现,Gitea 有「镜像仓库」功能。

上游仓库尚在,本地仓库可以同步更新,上游仓库删除,本地仓库也不会随之消失,本地仓库占用的空间永远与上游仓库相近。

不过这项功能有个缺点,仓库作者可以通过强制推送来删除上游仓库的内容,甚至把仓库换成另一个仓库。若上游仓库换成了另一个仓库,本地仓库也会同步上游仓库更改,变成另一个仓库。

无意间发现了 git fetch

执行 git fetch <repo> *:refs/remotes/0924,待命令执行完毕,refs/remotes/0924 下会完整显示上游仓库引用的一切,git checkout 命令也可调出远程仓库的文件。不知道这么做有没有缺点,请大家指点指点

918 次点击
所在节点    git
7 条回复
sagaxu
4 天前
git fetch 备份不会比 git bundle 更省空间,如果你观测到有节省,那一定是某个环节误解了
7164447205
4 天前
@sagaxu 上游仓库占用空间 200M 。

在 20 号 和 21 号 分别使用 `git fetch <repo> *:refs/remotes/0920` 和 `git fetch <repo> *:refs/remotes/0921` 下载此仓库,所用空间 200M 。

在 20 号 和 21 号分别使用 `git bundle create 0920.bundle --all` 和 `git bundle create 0921.bundle --all` 打包此仓库,所用空间近 400M ,请问我哪个步骤出错了?
7164447205
4 天前
注:在使用 `git bundle create` 命令之前,会先使用 `git clone` 命令下载当天的仓库,以此保存仓库不同时段的内容
sagaxu
4 天前
@7164447205 refs 下面只有“指针”,实际存储在.git/objects 目录,git fetch 能让.git/objects 变小吗?
7164447205
4 天前
@sagaxu 我可能没说清楚。我说的「备份仓库」,近似于保存仓库的「快照」,以便还原仓库在不同时间下的全貌。`git bundle` 空间消耗太快,不是指 `git bundle` 打包出的文件比 `git fetch` 的大,而是说每新建一个快照,`git bundle` 就要占用与上游仓库一样大的空间。`git fetch` 则不然,每新建一个快照,都会复用之前保存过的快照,新快照复用新旧快照同有的文件,再下载少许旧快照没有的文件,本地仓库占用的空间由此不会激增
sagaxu
3 天前
@7164447205 git bundle 可以做增量备份,定期全量 + 日常增量 是比较常用的备份策略

https://git-scm.com/docs/git-bundle
7164447205
3 天前
@sagaxu 感谢。`git bundle` 确能如此,我之前了解得不够。不过我也没找出 `git fetch` 有何显著缺点,看起来二者皆可

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1075501

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX