仅通过SSH时如何跨系统同步个人笔记本与工作主机的目录
背景
- 居家办公常态化后,日常使用个人Windows笔记本完成开发,再将产出文件传输到公司配发的Linux工作电脑上
- 最初将团队协作的git仓库复制到个人笔记本,编写过scp脚本将自己开发的文件单向传输到公司工作电脑
- 长期使用后,公司工作电脑上的仓库已经累积了团队其他成员提交的大量新增文件,需要把这些增量内容同步回个人笔记本的对应目录
- 现有约束:
- 全量重新复制整个仓库耗时过长,效率偏低
- 个人笔记本上的目录已脱离git项目管理,无法使用git拉取、生成补丁这类基于版本控制的同步方式
- 公司合规规定不允许在个人笔记本上配置对应项目的远程git仓库
- 两台设备之间仅能通过SSH网络连通,无其他文件共享通道
核心问题
在仅依靠SSH连通的前提下,如何高效实现个人笔记本上的目录与公司工作电脑对应目录的同步更新,规避全量拷贝、适配个人端脱离git管理的现状。
实操方案
方案1:基于rsync的块级增量同步(最适配当前场景)
- 核心优势:rsync原生支持通过SSH通道传输,会自动比对两端文件的修改时间、大小、哈希值,仅传输存在差异的文件块,不需要全量拷贝;全程不会在个人端搭建git远程仓库,完全符合合规要求
- 具体操作步骤:
- 环境准备:公司端Linux系统自带rsync工具无需额外安装;个人Windows端无需单独安装软件,Git for Windows安装完成后自带rsync命令,直接在Git Bash终端中即可调用
- 首次执行前先加模拟参数验证,避免误操作导致文件丢失:
执行后会打印所有待同步的文件列表,确认没有匹配错误的路径、没有误删个人端独有内容后,去掉rsync -avz --dry-run -e ssh 公司Linux端用户名@SSH连通地址:/公司仓库绝对路径/ 个人笔记本对应目录绝对路径/--dry-run参数即可实际执行同步 - 常用参数说明:
-a:保留文件的修改时间、权限等属性,避免后续每次同步都因为属性差异重新传输所有文件-v:显示同步过程日志,可直观看到本次同步的文件清单-z:传输过程中压缩文件内容,降低带宽占用- 若不需要让个人端和公司端目录完全一致(仅拉取公司端的新增/修改内容,不删除个人端独有的文件),无需开启删除逻辑;如果需要完全对齐公司端的目录状态,可加上
--delete参数,自动删除个人端存在、但公司端已经移除的文件
- 避坑提示:两端的路径末尾一定要加上斜杠
/,否则会出现目录嵌套的问题——也就是把公司端的整个仓库目录,嵌套拷贝到个人笔记本的目标目录里,而不是将两端的目录内容平铺对齐
方案2:基于scp的全文件级增量同步(无额外软件依赖)
如果不想使用Git Bash自带的rsync工具,可在原有scp脚本基础上增加差异比对逻辑实现同步:
- 操作逻辑:
- 通过SSH连接到公司Linux端,遍历仓库目录下的所有文件,生成包含文件路径、修改时间、文件大小的清单文件
- 通过SSH将清单文件传到个人笔记本,和个人端对应目录的文件属性做比对,筛选出个人端不存在、或者修改时间早于公司端的文件列表
- 仅通过scp命令拉取筛选出的差异文件,实现增量传输
- 适用场景:该方式没有块级去重能力,同步效率和带宽消耗都比rsync高,仅适合临时同步少量文件的场景,不适合长期高频同步使用
内容的提问来源于stack exchange,提问作者Noctus17
相关产品推荐
相关产品推荐

