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
2
git clone --mirror https://gitee.com/org/project.git
cd 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
2
git fetch -p origin
git push --mirror

可以写 cron:

1
*/5 * * * * /data/sync/sync_git.sh

示例脚本:

1
2
3
4
5
6
#!/bin/bash

cd /data/git/project.git

git fetch -p origin
git push --mirror gitlab

4.常见坑

4.1分支删除不同步

必须使用:

git push --mirror

否则删除的分支不会同步。


4.2tag不同步

必须:

--mirror

或者:

git push --tags

4.3LFS 文件

如果使用 Git LFS
需要:

1
2
git lfs fetch --all
git lfs push --all gitlab