一个备份 git 仓库的思路,各位有什么建议

161 天前
 0o0O0o0O0o
git config alias.backup '!f() { ([ -f "/path/to/git-backup/$1/HEAD" ] || git init --bare "/path/to/git-backup/$1") && (git remote set-url --delete origin "/path/to/git-backup/$1" 2>/dev/null; git remote set-url --add origin "/path/to/git-backup/$1"); }; f'

cd /path/to/something

git init
git remote add origin git@github.com:username/something.git

git backup something

git remote -v
# origin	git@github.com:username/something.git (fetch)
# origin	git@github.com:username/something.git (push)
# origin	/path/to/git-backup/something (push)

如此在每次 push 到 github/gitlab 的同时,还会 push 到 /path/to/git-backup 下,然后再用备份工具对 /path/to/git-backup 进行备份,这样:

  1. 不用考虑排除哪些文件,不挑备份工具,备份脚本不复杂
  2. 不用考虑用的是什么 git hosting service
  3. 不需要额外运行个服务(本来是打算跑个 gitea/gogs 的,但是为了可以加密备份放弃了)

未解决:

  1. 并非本地做的一些变更提交,例如 actions 中产生的
  2. 未 push 的,其实我并没有这个需求,我认为只对 push 过的负责挺好的
  3. 代码以外的东西,例如 issues 、pull requests 、discussions 中的讨论,尽管我没有这个需求
  4. .gitignore 排除掉的秘密、配置文件,虽然以前提问过,站内有人推荐 git-crypt ,但我觉得我还需要一个别的方案

各位对此思路有什么想法和建议吗?

2125 次点击
所在节点    git
12 条回复
hellodigua
161 天前
怎么感觉多此一举,github 本身就算备份了吧

如果你担心 github 仓库出现问题的话,写一个 github action ,每天定时打包一个 zip 发送到 OSS 里面
0o0O0o0O0o
161 天前
@hellodigua

> github 本身就算备份了

我觉得不算,例如存在封号 /t/924024 ,我觉得没有用户尤其是大陆用户可以保证自己理解并永远遵守了所有 ToS ,因为有些事情不受你控制 (如 https://docs.github.com/en/site-policy/other-site-policies/github-and-trade-controls ),也没有人可以保证风控不会出 BUG

> 写一个 github action ,每天定时打包一个 zip 发送到 OSS 里面

理解,优点是可以备份不是自己在本地发起的提交,但个人觉得没这个思路优雅和安全:

1. github repo 有 public 也有 private ,还可能是某个 organization 的 member ,每个仓库一个 github actions 有维护负担,只用一个 actions 则面临权限问题,尝试突破就无法遵循安全实践

2. 用到的 git hosting service 可能不止 github ,还有 gitlab 或者一些自建的服务
hellodigua
161 天前
你要是担心公有 git 的安全性问题,那不如自建一个私有 gitlab ,每个仓库同时上传到 github 和私有 gitlab ,定期对 gitlab 整体备份就行了
0o0O0o0O0o
161 天前
@hellodigua #3

这就是我之前的思路,见优势里列的第 3 条,我本来为了可以加密备份甚至打算直接本地跑一个的,转念一想既然都本地了,那直接用路径就行了,不需要跑个服务了,用法都一样
awesomes
161 天前
工作不饱和嘛
maymay5
161 天前
这是我现在用的方案:
* 一台支持文件同步的 NAS
* GitHub 照常 push ,NAS 自动同步我最新的代码文件至本地
* 同样的这个方案我也放在我的 Windows Service 上,但是为了防止覆盖,我 Server 上专门做了个 Windows 服务,用日期文件夹方式进行版本管理,缺点就是烧硬盘,而且做了自动备份,没做自动删除,每隔个十天半个月我就要去手动删垃圾
缺点:
* NAS 不能版本管理,纯覆盖,只能说聊胜于无
maymay5
161 天前
忘记说优点了哈哈:硬盘不坏的前提下,天王老子来了我代码或者程序也不会丢,一定可以还原
pigf
161 天前
我就没有这些顾虑,我写的代码没什么价值
0o0O0o0O0o
161 天前
@maymay5 #6

- 我不想让私钥或者可以读私有仓库的 PAT 离开我的笔记本电脑,所以没办法在别的设备上去主动同步仓库;
- 如果是利用同步备份的工具来做,可以看我列出的优点中的第一条:需要维护麻烦的排除规则,因为本地仓库文件夹里有各种 .*ignore ,有时甚至还会有不在 ignore 文件中但也不打算提交的文件,又或者是 submodule 等等;
- 工具你可以试试 restic ,压缩、加密、增量,有快照有策略
BeijingBaby
161 天前
想的太复杂了,直接无脑同步推送到另一个自建 git 就行了。
0o0O0o0O0o
161 天前
改了改配置文件,已经用上了,一段时间后再来总结一下实际体验中的优缺点
dreammis
161 天前
自己搭建 gitea ,直接从外部 clone ,自动会同步

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

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

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

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

© 2021 V2EX