备份仓库有什么好方法?
起初,我用 git bundle
来备份仓库,但是空间消耗太快,我想尽可能节省空间。
后来发现,Gitea 有「镜像仓库」功能。
上游仓库尚在,本地仓库可以同步更新,上游仓库删除,本地仓库也不会随之消失,本地仓库占用的空间永远与上游仓库相近。
不过这项功能有个缺点,仓库作者可以通过强制推送来删除上游仓库的内容,甚至把仓库换成另一个仓库。若上游仓库换成了另一个仓库,本地仓库也会同步上游仓库更改,变成另一个仓库。
无意间发现了 git fetch
。
执行 git fetch <repo> *:refs/remotes/0924
,待命令执行完毕,refs/remotes/0924
下会完整显示上游仓库引用的一切,git checkout
命令也可调出远程仓库的文件。不知道这么做有没有缺点,请大家指点指点
1
sagaxu 62 天前
git fetch 备份不会比 git bundle 更省空间,如果你观测到有节省,那一定是某个环节误解了
|
2
7164447205 OP @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 ,请问我哪个步骤出错了? |
3
7164447205 OP 注:在使用 `git bundle create` 命令之前,会先使用 `git clone` 命令下载当天的仓库,以此保存仓库不同时段的内容
|
4
sagaxu 62 天前
@7164447205 refs 下面只有“指针”,实际存储在.git/objects 目录,git fetch 能让.git/objects 变小吗?
|
5
7164447205 OP @sagaxu 我可能没说清楚。我说的「备份仓库」,近似于保存仓库的「快照」,以便还原仓库在不同时间下的全貌。`git bundle` 空间消耗太快,不是指 `git bundle` 打包出的文件比 `git fetch` 的大,而是说每新建一个快照,`git bundle` 就要占用与上游仓库一样大的空间。`git fetch` 则不然,每新建一个快照,都会复用之前保存过的快照,新快照复用新旧快照同有的文件,再下载少许旧快照没有的文件,本地仓库占用的空间由此不会激增
|
6
sagaxu 61 天前
|
7
7164447205 OP @sagaxu 感谢。`git bundle` 确能如此,我之前了解得不够。不过我也没找出 `git fetch` 有何显著缺点,看起来二者皆可
|