git仓库同步mirror
目的
GitLab 成为一个 mirror repo,定期从 Gitee pull 所有 refs(branch/tag)。
- Git 原生 mirror(最稳定)
1.Git 原生 Mirror(最稳定)
Git 本身就支持 完整镜像同步。
1.1创建 GitLab 空仓库
在 GitLab 创建仓库,例如:
http://gitlab.internal/dev/project.git
不要初始化 README。
1.2 clone gitee 仓库(mirror模式)
1 | git clone --mirror https://gitee.com/org/project.git |
--mirror 与 --bare 不同:
| 模式 | 作用 |
|---|---|
| bare | 只有代码 |
| mirror | 包含 refs/tags/hooks 全部元数据 |
2.push 到 GitLab
1 | git push --mirror http://gitlab.internal/dev/project.git |
此时:
- 所有 branch
- 所有 tag
- 所有 refs
都会同步。
3.后续同步
进入目录执行:
1 | git fetch -p origin |
可以写 cron:
1 | */5 * * * * /data/sync/sync_git.sh |
示例脚本:
1 |
|
4.常见坑
4.1分支删除不同步
必须使用:
git push --mirror
否则删除的分支不会同步。
4.2tag不同步
必须:
--mirror
或者:
git push --tags
4.3LFS 文件
如果使用 Git LFS
需要:
1 | git lfs fetch --all |