```sh
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 ,但我觉得我还需要一个别的方案

各位对此思路有什么想法和建议吗?
举报· 97 次点击
登录 注册 站外分享
6 条回复  
hellodigua 小成 2024-6-17 12:58:04
怎么感觉多此一举,github 本身就算备份了吧

如果你担心 github 仓库出现问题的话,写一个 github action ,每天定时打包一个 zip 发送到 OSS 里面
awesomes 小成 2024-6-17 13:40:15
工作不饱和嘛
maymay5 小成 2024-6-17 15:43:47
这是我现在用的方案:
* 一台支持文件同步的 NAS
* GitHub 照常 push ,NAS 自动同步我最新的代码文件至本地
* 同样的这个方案我也放在我的 Windows Service 上,但是为了防止覆盖,我 Serfer 上专门做了个 Windows 服务,用日期文件夹方式进行版本管理,缺点就是烧硬盘,而且做了自动备份,没做自动删除,每隔个十天半个月我就要去手动删垃圾
缺点:
* NAS 不能版本管理,纯覆盖,只能说聊胜于无
pigf 小成 2024-6-17 17:10:45
我就没有这些顾虑,我写的代码没什么价值
BeijingBaby 小成 2024-6-17 17:19:14
想的太复杂了,直接无脑同步推送到另一个自建 git 就行了。
dreammis 小成 2024-6-17 21:55:58
自己搭建 gitea ,直接从外部 clone ,自动会同步
返回顶部