有时候因为条件限制,我们不能使用git仓库进行代码的更新工作。
例如你需要更新服务器的代码,一般的生产环境上面的代码是某个版本的代码而非整个git仓库。
当你进行了一些开发,你需要将你的代码部署到服务器上面,进行一系列测试。
这时,使用patch是一个不错的办法。
- 确保你的服务器上安装了
patch
命令。如果没有安装,在联网状态下安装一下也就几分钟的事。 - 在你本地生成patch文件。在你的git仓库中,生成patch 文件有两种方法。
- 使用
git format-patch commit_id
。这条命令会把从HEAD到你指定的commit_id
的所有提交都单独生成一个patch文件。这种情况下生成的patch 文件只适用于服务器上要更新的 代码也是一个git仓库里的代码。 - 使用
git diff master (or commit_id) > test.patch
。这条命令生成的patch文件可以在linux系统上直接用patch命令打到代码里,也就是所谓的通用patch。这里master就是master分支;也可以是你想对比的版本号。比如HEAD^
,就会把你的最新代码和HEAD^
这个版本进行比较,并生成patch文件。
- 使用
- 将你的patch文件拷贝到你的服务器工程目录中,使用命令
patch -pn < patch_file
n
的意思就是忽略掉几个/
。例如:
如果你把这个patch 文件放到你服务器上的--- a/aaa/bbb/ccc.py +++ b/aaa/bbb/ccc.py
../aaa
目录,那么你只需要忽略掉上面的diff比较的文件路径的第一个/
就可以了,也就是你应该使用命令:patch -p1 < patch_file
注意
应用patch到时候会有一些输出,注意看是否有错误信息。
另外,应用完成以后记得查找一下.rej
文件,如果有这种文件表示应用失败,一般的原因就是代码冲突。
不要慌,打开这个.rej
以及相应的.orig
文件对比一下你就知道冲突在哪了,解决掉冲突就可以了。
撤销patch
将打上的补丁给恢复回去:
patch -R pn < patch_file