如何在不修改生产结构前提下对比非Git仓库生产文件与远程Git仓库差异
方案一:生产环境完全无需依赖Git(优先推荐)
全程仅使用Unix系统自带工具,不会对业务目录产生任何改动:
- 开发端导出标准版本包:
在持有Git仓库的开发/发布机器上,切换到生产环境对应部署的版本分支/标签,执行打包命令:git archive --format=tar.gz -o prod_standard.tar.gz HEAD - 生产端执行比对:
将打包好的prod_standard.tar.gz上传到生产环境的临时目录(如/tmp,禁止写入业务目录),执行以下命令:
去掉命令中的# 解压标准版本到临时目录 mkdir -p /tmp/prod_standard tar -zxf /tmp/prod_standard.tar.gz -C /tmp/prod_standard # 递归比对两个目录的差异,可按需添加--exclude参数过滤日志、临时文件 diff -rq \ --exclude='*.log' \ --exclude='*.tmp' \ /tmp/prod_standard/app \ /../../appq参数即可输出具体文件的内容差异。
方案二:允许放置Git二进制的轻量方案
比对效率更高,支持Git原生的差异过滤规则,全程不会在业务目录生成.git相关文件:
- 开发端导出Git索引包:
在持有Git仓库的开发/发布机器上,切换到生产对应版本,执行命令生成索引包:git bundle create prod_index.bundle HEAD - 生产端执行比对:
将对应CPU架构的静态编译Git二进制文件、prod_index.bundle都上传到生产环境临时目录,执行命令:cd /../../ # 仅输出差异文件列表 /tmp/git diff --no-index --stat /tmp/prod_index.bundle:app ./app # 如需查看具体内容差异,去掉--stat参数即可
所有临时操作文件都存放在/tmp目录,操作完成后可直接删除,不会对生产环境现有结构产生任何影响。
内容的提问来源于stack exchange,提问作者TinkerPhil
相关产品推荐
相关产品推荐

