开发工作站无法直接访问Git仓库的跨机协作方案技术咨询
嘿,这个场景我之前碰到过类似的,刚好能给你一套适配你三台机器环境的Git协作方案,比你现在复制整个项目高效太多了!
Git的bundle功能专门解决离线环境下的代码同步问题,它能把仓库的变更打包成单个文件,只传输差异内容,比复制整个项目文件夹节省大量时间。
从机器A同步最新代码到机器C(拉取流程)
在机器A上打包仓库:
打开Git终端(Windows用Git Bash),进入仓库目录,执行命令生成bundle文件:# 打包main分支的所有内容(如果要同步所有分支,换成 --all) git bundle create repo.bundle main生成的
repo.bundle就是包含所有Git版本信息的单个文件,体积远小于整个项目。中转文件:把
repo.bundle从A复制到B,再从B复制到C。在机器C上克隆/拉取:
- 如果你还没有本地仓库(用Git命令):
git clone repo.bundle my-project - 用SourceTree操作:
打开SourceTree → 点击「新建」→ 「从克隆URL克隆」→ 在URL框选择
repo.bundle的本地路径 → 选好存储目录 → 点击克隆。 - 如果你已有本地仓库,拉取更新(Git命令):
git pull repo.bundle main - SourceTree拉取更新:
打开仓库 → 点击「拉取」→ 「远程仓库」下拉框选「添加仓库」→ 浏览选择
repo.bundle→ 选择目标分支 → 点击拉取。
- 如果你还没有本地仓库(用Git命令):
从机器C推送代码到机器A(提交流程)
在机器C上完成本地提交:
- Git命令:
git add . git commit -m "修复XX问题/新增XX功能" - SourceTree操作:
把变更文件拖到「已暂存文件」区域 → 输入提交描述 → 点击「提交」。
- Git命令:
打包本地变更:
你需要指定从机器A的最新提交之后的变更打包(可以通过git log查看上次拉取时的最后一个提交哈希,比如abc123):# 打包abc123之后main分支的所有新增提交 git bundle create changes.bundle abc123..main # 如果是基于上次拉取的远程分支,也可以用:git bundle create changes.bundle origin/main..main这个
changes.bundle只包含你新增的提交,体积非常小。中转文件:把
changes.bundle从C复制到B,再从B复制到A。在机器A上拉取变更:
# 先验证bundle有效性(可选) git bundle verify changes.bundle # 拉取变更到main分支 git pull changes.bundle main
适配你环境的小Tips
- 机器B只需要做文件中转,不需要任何Git操作,完全不用改动它的SourceTree配置。
- 机器C上用SourceTree的话,记得先装好Git(SourceTree依赖Git环境),可以在SourceTree的「工具→选项→Git」里检查路径是否配置正确。
- 同步前尽量保证本地分支干净(没有未提交的变更),如果遇到冲突,和普通Git冲突处理流程一样:解决冲突→提交→再同步。
如果你们需要高频次同步代码,可以在机器B上创建一个裸仓库,作为A和C的中转节点:
- 在机器B上创建裸仓库:
git init --bare project-bare.git - 机器A关联B的裸仓库并推送:
git remote add machine-b /path/to/machine-b/project-bare.git git push machine-b --all - 复制B的裸仓库到C:把
project-bare.git文件夹从B复制到C,然后在C的本地仓库关联这个裸仓库:git remote add machine-b /path/to/copied/project-bare.git - 后续同步流程:
- C开发完提交后,推送到本地的裸仓库:
git push machine-b main - 把C上的
project-bare.git复制回机器B的原位置 - 机器A拉取变更:
git pull machine-b main
- C开发完提交后,推送到本地的裸仓库:
这个方案适合长期频繁协作的场景,每次只需要复制裸仓库的变更(比整个项目小很多),但操作比bundle稍复杂一点。
内容的提问来源于stack exchange,提问作者PiotrS

