1

我刚刚克隆了一个包含一些 linux 内核模块的旧存储库(不要问)。如果我在 linux 机器上克隆,一切都很好。然而,在我的 Mac 上,有人(可能是 Mac OS X)对模块进行了二进制更改。我已经禁用了 autocrlf。

这是git diff -p --stat 直接克隆后的输出:

 .../kernel/net/ipv4/netfilter/ipt_ecn.ko           |  Bin 3853 -> 4535 bytes
 .../kernel/net/ipv4/netfilter/ipt_ttl.ko           |  Bin 3458 -> 3904 bytes
 .../kernel/net/netfilter/xt_connmark.ko            |  Bin 4534 -> 5618 bytes
 .../2.6.26-2-686/kernel/net/netfilter/xt_dscp.ko   |  Bin 4378 -> 5217 bytes
 .../2.6.26-2-686/kernel/net/netfilter/xt_mark.ko   |  Bin 3679 -> 4334 bytes
 .../kernel/net/netfilter/xt_rateest.ko             |  Bin 4545 -> 7137 bytes
 .../2.6.26-2-686/kernel/net/netfilter/xt_tcpmss.ko |  Bin 3841 -> 6553 bytes
 7 files changed, 0 insertions(+), 0 deletions(-)

diff --git a/i686/modules/2.6.26-2-686/kernel/net/ipv4/netfilter/ipt_ecn.ko b/i686/modules/2.6.26-2-686/kernel/net/ipv4/netfilter/ipt_ecn.ko
index 76d7d8d..b1470d6 100644
Binary files a/i686/modules/2.6.26-2-686/kernel/net/ipv4/netfilter/ipt_ecn.ko and b/i686/modules/2.6.26-2-686/kernel/net/ipv4/netfilter/ipt_ecn.ko differ
diff --git a/i686/modules/2.6.26-2-686/kernel/net/ipv4/netfilter/ipt_ttl.ko b/i686/modules/2.6.26-2-686/kernel/net/ipv4/netfilter/ipt_ttl.ko
index d974dc9..9dcb633 100644
Binary files a/i686/modules/2.6.26-2-686/kernel/net/ipv4/netfilter/ipt_ttl.ko and b/i686/modules/2.6.26-2-686/kernel/net/ipv4/netfilter/ipt_ttl.ko differ
diff --git a/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_connmark.ko b/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_connmark.ko
index d9381a6..14c2a2c 100644
Binary files a/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_connmark.ko and b/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_connmark.ko differ
diff --git a/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_dscp.ko b/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_dscp.ko
index 36af201..178adfa 100644
Binary files a/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_dscp.ko and b/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_dscp.ko differ
diff --git a/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_mark.ko b/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_mark.ko
index 2dd1a0a..1329162 100644
Binary files a/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_mark.ko and b/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_mark.ko differ
diff --git a/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_rateest.ko b/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_rateest.ko
index 8678387..b23e514 100644
Binary files a/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_rateest.ko and b/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_rateest.ko differ
diff --git a/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_tcpmss.ko b/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_tcpmss.ko
index 13e4891..7c3c61c 100644
Binary files a/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_tcpmss.ko and b/i686/modules/2.6.26-2-686/kernel/net/netfilter/xt_tcpmss.ko differ

Agit reset --hard也不行。不过,确实会发生一些奇怪的事情:每次我进行重置时,git diff切换位置右侧的大小和文件名中的一些大写字母都会发生变化。我在 Mac 上确实有一个不区分大小写的文件系统,这可能是造成这种情况的原因吗?我该如何解决这个问题(如果可能,无需重新格式化 Mac)

4

1 回答 1

4

问题是由于 HFS+ 文件系统的不区分大小写的默认设置。

取第一个有问题的文件:

i686/modules/2.6.26-2-686/kernel/net/ipv4/netfilter/ipt_ecn.ko

您会发现(如最初记录的那样)ipt_ECN.ko在同一目录中还有一个名为的文件:

git ls-tree HEAD -- i686/modules/2.6.26-2-686/kernel/net/ipv4/netfilter/ | 
grep '^ipt_.*\.ko'

从理论上讲,您可以重新格式化您的引导卷以使用区分大小写的 HFS+ 版本,但这往往会导致随机应用程序出现问题(例如,那些存储/安装名为 的文件foo,但后来只尝试读取名为 的文件的应用程序Foo)。

缺少 bakup/reformat/restore,您可以在使用区分大小写的 HFS+ 格式化的磁盘映像中工作。使用磁盘工具创建一个新的磁盘映像(可能是一个“稀疏包”映像)并将您的工作树放入该卷中(它将安装在 下/Volumes/)。您可能需要创建一个默认磁盘映像,然后通过在结果卷的擦除选项卡中指定“Mac OS 扩展(区分大小写,日志式)”来重新格式化它)。

于 2010-10-10T05:54:42.390 回答