社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
记录这篇是来源于我有一个项目,将代码从仓库拉下来后,需要修改一些配置才能够运行。我不想每次都手动去修改那几个需要自定义的配置文件,所以我做了一个patch。然后每次把代码拉下来后,运行一下git apply set_config.patch
,所有的配置就自动修改好了。
但是今天我apply这个patch的时候,我得到了一条错误信息:
$ git apply set_config.patch
error: patch failed: conf/file_a.conf:18
error: conf/file_a.conf: patch does not apply
这说明我的patch不能应用到当前代码了。
于是我需要搞清楚为什么,然后再对patch做一些手动的修改,就能够应用这个patch了。
于是我认真地学习了一下git diff
输出的含义。因为我的patch文件是通过git diff > set_config.patch
生成的。
我主要是不明白patch文件中@@ -83,7 +83,7 @@ class aaa(threading.Thread):
这句话的含义,于是我查到了:
第二部分,变动的位置用两个@作为起首和结束。
@@ -1,7 +1,7 @@
前面的"-1,7"分成三个部分:减号表示第一个文件(即f1),"1"表示第1行,“7"表示连续7行。合在一起,就表示下面是第一个文件从第1行开始的连续7行。同样的,”+1,7"表示变动后,成为第二个文件从第1行开始的连续7行。
参考链接:http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html
于是我根据上面的错误信息,定位到了file_a.conf文件。紧接着定位到了这样一行:
diff --git a/conf/file_a.conf b/conf/file_a.conf
...
@@ -18,16 +18,16 @@ var_a = 1
var_NAME = a
一样的行
+ ...
+ ...
- ...
- ...
- 一样的行
我将这部分diff结果删去,然后再运行git apply set_config.patch
,成功。于是问题百分百出在了file_a.conf上。
然后我将patch文件中,从var_NAME = a
开始的16行拷贝出来,然后和file_a.conf的从var_NAME = a
开始的16行进行对比。发现最后的本该一样的行,却显示不一样。如下图最后一行(图中的变量名并不是好的例子,仅仅是为了说明今天要说明的问题随便取的,请勿模仿):
然后我将代码中的不一样的这行,改成一样的,也就是将代码里的aaa = 2
改成 aaa = 1
,然后再运行git apply set_config.patch
,成功。
原来这次错误的原因是,远程仓库的代码对配置文件的默认值进行了更新。而我做这个patch文件的时候,这个值还未被更新。所以我需要更新一下我的patch,让它能够应用到新的代码上:
于是在我应用了set_config.patch后,git diff
一番查看,确认所有的代码是我要自定义的修改。再次运行git diff > set_config.patch
,更新了patch文件,我发现patch文件中的这行:@@ -18,16 +18,16 @@ var_a = 1
变成了@@ -18,19 +18,19 @@ var_a = 1
最后,如果需要撤回刚才打上的那个Patch,使用命令:git apply -R set_config.patch
。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!