我运行以下命令来应用补丁,在第一次尝试中,它吐出了几个错误,说这些文件的补丁应用失败,在对这些文件进行更改后,我再次运行该命令,看到了一大堆其他错误。
git apply --ignore-space-change --ignore-whitespace patch-file
但是我检查了几个文件,看起来补丁是正确应用的,但是为什么会出现错误?下面的.rej和源文件不能帮助我调试原因
// c.rej
fi
fi
- if [ "$qcrild_status" = "true" ]; then
+ multisim=`getprop persist.radio.multisim.config`
+
+ if [ "$multisim" = "dsds" ]; then
# Make sure both rild, qcrild are not running at same time.
# This is possible with vanilla aosp system image.
stop ril-daemon
// .c
fi
fi
multisim=`getprop persist.radio.multisim.config`
if [ "$multisim" = "dsds" ]; then
# Make sure both rild, qcrild are not running at same time.
# This is possible with vanilla aosp system image.
stop ril-daemon
补丁清楚地表明我们必须删除这一行:
- if [ "$qcrild_status" = "true" ]; then
在应用此补丁的文件中似乎不存在这样的行。
补丁说,在删除该行时,我们应该添加三个替代行:
+ multisim=`getprop persist.radio.multisim.config` + + if [ "$multisim" = "dsds" ]; then
显然,这些行已经存在了。因此,这个特殊的diff块可能已经在文件的版本中,并且这个补丁-或者这个补丁的这一部分-不应该被应用。
当然,这只是一个猜测。这是补丁的一般问题:补丁说明如何更改某些特定文件(或至少是某些特定文件的某些特定版本),从而使其成为其他文件,或同一文件的某些不同版本。但是您可能有第三个版本的文件,或者您可能已经有了更新后的文件。在这种情况下,补丁不会应用,或者更糟的是,当不应该应用时,将应用。
后一种情况发生时,例如,补丁只是说要添加已经出现多次的行的额外副本。例如,假设文件的一个版本说:
Just the place for a Snark.
Just the place for a Snark.
假设编辑-补丁-包含查找这一行的这两个出现的指令,并添加第三个:
Just the place for a Snark.
+Just the place for a Snark.
Just the place for a Snark.
当此补丁应用于文件的两行版本时,您将获得文件的三行版本。当将相同的补丁应用于三行版本时,您将获得四行版本。如果这个补丁被应用了一千次,你得到的文件版本中出现了超过1000次的行。
(也许这使它更真实?或:
也许这只是鸟的音符
一个人应该永远小心,
鸟叫枣枣——你听说过这个词吗?
在一首你会在那边找到的诗里。
是的,我错过了奇数行的内部押韵。唉。)