How to keep two Git repositories in sync
项目代码存在多个远程Git仓库里(例如:Github、Gitlab、Gitee),需确保不同远程仓库代码版本一致。
初次搭建仅需3步!以后同步只需1步!
1、检出源仓中的项目
# 到代码缓存目录
cd ~/code-sync
git clone --mirror https://github.com/jack/my-project.git
2、增加第二个远程仓库Git
cd my-project.git
git remote add --mirror=fetch secondary https://gitee.com/jack/my-project.git
3、同步
cd ~/code-sync/my-project.git
git fetch origin
git push secondary --all
以后需要同步时,只需执行第3步即可
上述步骤封装到脚本2个中:项目同步初始化脚本init_pro_sync.sh、项目同步脚本sync-项目名.sh
使用说明:
1、修改init_pro_sync.sh【TODO】部分配置
2、执行init_pro_sync.sh,自动在CODE_DIR目录创建:{项目名}.git目录、sync-{项目名}.sh同步脚本
3、以后需要同步时,仅需执行 sync-{项目名}.sh同步脚本 即可
Tips:
建议将CODE_DIR目录添加到环境变量中,缩短输入的脚本路径
1、cf.sh:
#!/bin/bash
#公共变量
# 本地缓存目录
BASE_DIR=~/code-sync/
2、init_pro_sync.sh:
#!/bin/bash
# 引入公共变量
source cf.sh
### 【TODO】按需修改下面参数即可:
# 项目名
PRO_NAME=my-project
# 本地缓存目录-> 从公共变量cf.sh中获取
# BASE_DIR=/Users/zxc/code-sync
# 项目 源Git仓库地址(以/结尾)
FROM_GIT=https://github.com/jack/
# 项目 目标Git仓库地址(以/结尾)
TO_GIT=https://gitee.com/jack/
PRO_GIT_NAME=$PRO_NAME.git
cd $BASE_DIR
git clone --mirror $FROM_GIT$PRO_GIT_NAME
cd $PRO_GIT_NAME
git remote add --mirror=fetch secondary $TO_GIT$PRO_GIT_NAME
# 开始第一次同步
git fetch origin
git push secondary --all
# 生成每次同步的sh
cd $BASE_DIR
file_name="sync-${PRO_NAME}.sh"
cat > $file_name << EOF
#!/bin/bash
# 引入公共变量
source cf.sh
cd \$BASE_DIR
cd $PRO_GIT_NAME
git fetch origin
git push secondary --all
EOF
# 授权可执行
chmod +x $file_name