0

我运行以下命令来应用补丁,在第一次尝试中,它吐出了几个错误,说这些文件的补丁应用失败,在对这些文件进行更改后,我再次运行该命令以查看很多其他的错误。

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

4

1 回答 1

0

补丁清楚地表明我们必须删除这一行:

-    if [ "$qcrild_status" = "true" ]; then

应用此补丁的文件中似乎不存在这样的行。

补丁说,在删除该行时,我们应该添加三个替换行:

+    multisim=`getprop persist.radio.multisim.config`
+
+    if [ "$multisim" = "dsds" ]; then

显然,这些线条已经存在。所以这个特殊的差异块很可能已经你拥有的文件版本中,并且这个补丁——或者这个补丁的这一部分——不应该被应用。

当然,这只是一个猜测。这是补丁的普遍问题:补丁说明了如何更改某个特定文件——或者至少是某个特定文件的某个特定版本——以便它成为某个其他文件,或者同一文件的某个不同版本。但是您可能拥有该文件的第三个版本,或者您可能已经拥有更新的文件。在这种情况下,补丁将不会应用,或者更糟糕的是,将在不应该应用的时候应用。

后者发生在例如,一个补丁只是说添加一个已经出现多次的行的额外副本。例如,假设文件的一个版本说:

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 次的文件版本。

(也许这使它更加真实?或者:

也许它只是鸟的音符,
   人们应该时刻注意它,
那只鸟叫 Jubjub——你听说过这个词吗?
  ——在一首诗中你会在那边找到。

是的,我错过了奇数行中的内部押韵。唉。)

于 2021-03-05T07:09:50.447 回答