一种基于 git 的不推送到远程的代码同步方法

摘要

本文介绍了一种同步代码的方法,适用于直接在远程服务器上调试,并修改了代码。但是因为服务器上没有配置 git 用户信息,或无推权限,而需要将修改的代码同步到本地电脑的开发环境上,如何不走 git remote repo 推送达到同步的目的。

正文

一种利用 git apply 同步两端 git 文件变动的方法。

有这样一种工作场景,有一个问题需要调试在线上。这个问题如果直接在线上调试则比较容易定位和修复,因为问题是在生产环境发现的,所以在生产环境复现相较于本地更容易,所以直接在服务器上修改代码然后启动并确认修复。假设现在代码经过验证是没有问题的,能够接受,那么接下来的事情就是把刚刚修复的代码提交记录并且推送到远程 git 仓库上。然而服务器上 git 客户端没有配置 user.name 和 user.email 信息。甚至有可能服务器上的这个仓库没有远程的推送权限。好的,那么你怎么将更新的代码同步到远程仓库呢?我知道可以通过设置 user.name 等信息配置一下 git 客户端,并且最多增加一个推送的权限来解决从服务器推送代码的问题。但是在服务器上配置 git 用户名和邮箱有些唐突,特别是当服务器是多个用户共用的的时候,配置哪一个用户名都不好。能否将服务器上的代码更新记录同步到本地仓库,然后再由本地仓库推送到远程仓库呢?

可以用 git apply 命令来更新 patch 到本地版本中,当然两者的基版本应该是一致的,只要都是最新的就不成问题。

先在服务器上创建 patch 文件,比如通过 git diff 命令重定向输出到文件 a.patch。

现在的问题将转化成了如何将 a.patch 下载到本地了。方法有很多种,可以通过 scp 或者 http 服务。即便远程服务器和本地不能直接通信,也是可以通过 http代理+http服务实现。大不了 cat 到终端然后复制到剪切板,也就同步到了本地。

别忘了创建的 a.patch 文件其实是不需要提交的,可以在创建后移除,或者一开始就指定路径,如 /tmp/a.patch

关于本文如您有任何想法和意见,欢迎与我们联系,邮箱地址zhi@uqugu.com
您对本文有什么看法,喜欢或者不喜欢都可以发表意见。