gitsync-go
支持跨网络git仓库同步的工具
gitsync-go
Go 版本 repo 同步工具,支持:
- 日志文件记录
- 业务日志文件(每个仓库任务一行,记录关键结果)
- 外网/内网网卡自动切换后再执行拉取/推送
- 指定分支同步(如
main、test) - 单次执行(建议由 Windows 任务计划程序定时触发)
1. 准备
- 安装 Go 1.22+
- 安装 Git 并确保
git在 PATH - 以管理员身份运行(启停网卡需要管理员权限)
2. 配置
复制 config.example.json 为 config.json 后按实际修改。
每个仓库必须配置 branches,只会同步这些分支。
3. 运行
先编译:
go build -o gitsync-go.exe .
查看网卡列表(用于直接拷贝到配置):
.\gitsync-go.exe --list-networks
按配置执行同步:
.\gitsync-go.exe -config .\config.json
4. 关键行为
- 外网阶段:先禁用并确认内网网卡已关闭,再启用外网网卡并等待“已连接”,然后按配置分支逐个
git fetch。 - 内网阶段:先禁用并确认外网网卡已关闭,再启用内网网卡并等待“已连接”,然后按配置分支逐个
git push。 - 推送前会额外检查远端就绪:
DNS 可解析、目标端口可连通、git ls-remote target成功,三者都通过后才推送。 - 每个仓库使用本地 mirror 目录缓存“上一步拉取的代码”。
- 详细命令输出写入日志文件,控制台只打印概要。
- 业务日志默认写入
./logs/gitsync-business.log,每个仓库只输出一行(仓库/分支/开始时间/耗时/结果/错误摘要)。 - 可通过
network.external_ready_timeout_seconds、network.internal_ready_timeout_seconds、network.remote_ready_timeout_seconds、network.adapter_poll_seconds调整等待超时与轮询间隔。