克隆后立即在OSX上修改Linux内核源代码
当我在OS X上克隆
Linux源代码时,它们会立即被更改,并且git reset –hard不会将内容恢复.这是一个完整的会议:
$git clone git://github.com/torvalds/linux.git $cd linux $git status On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: include/uapi/linux/netfilter/xt_CONNMARK.h modified: include/uapi/linux/netfilter/xt_DSCP.h modified: include/uapi/linux/netfilter/xt_MARK.h modified: include/uapi/linux/netfilter/xt_RATEEST.h modified: include/uapi/linux/netfilter/xt_TCPMSS.h modified: include/uapi/linux/netfilter_ipv4/ipt_ECN.h modified: include/uapi/linux/netfilter_ipv4/ipt_TTL.h modified: include/uapi/linux/netfilter_ipv6/ip6t_HL.h modified: net/netfilter/xt_DSCP.c modified: net/netfilter/xt_HL.c modified: net/netfilter/xt_RATEEST.c modified: net/netfilter/xt_TCPMSS.c no changes added to commit (use "git add" and/or "git commit -a") 我们可以看到,克隆后文件立即发生了变化.甚至不是他们的元数据,而是内容: git diff include/uapi/linux/netfilter_ipv6/ip6t_HL.h index ebd8ead..6e76dbc 100644 --- a/include/uapi/linux/netfilter_ipv6/ip6t_HL.h +++ b/include/uapi/linux/netfilter_ipv6/ip6t_HL.h @@ -1,6 +1,6 @@ -/* Hop Limit modification module for ip6tables +/* ip6tables module for matching the Hop Limit value * Maciej Soltysiak <solt@dns.toxicfilms.tv> - * Based on HW's TTL module */ + * Based on HW's ttl module */ #ifndef _IP6T_HL_H #define _IP6T_HL_H @@ -8,14 +8,14 @@ #include <linux/types.h> enum { - IP6T_HL_SET = 0,- IP6T_HL_INC,- IP6T_HL_DEC + IP6T_HL_EQ = 0,/* equals */ + IP6T_HL_NE,/* not equals */ + IP6T_HL_LT,/* less than */ + IP6T_HL_GT,/* greater than */ }; -#define IP6T_HL_MAXMODE IP6T_HL_DEC -struct ip6t_HL_info { +struct ip6t_hl_info { __u8 mode; __u8 hop_limit; }; 系统信息: >文件系统:Journaled HFS 到底是怎么回事?为什么在克隆后立即修改文件? 解决方法
即使OS X是Unix系统,它仍然与最着名的Unix克隆Linux有很大的不同.这是由于历史原因,因为OS X本质上是NextStep(在它的时代是Unix的革命版本),有很多FreeBSD的东西,Linux是一个从头开始编写的内核,有很多GNU的东西,以及OS X的政治原因是为了成功实现MacOS 9而设计的.
因此,通常默认的HFS文件系统不区分大小写(如Windows NTFS),而传统上是区分大小写的Linux.换句话说 – “A.txt”和“a.txt”是否指的是同一个文件? Git由Linus Torvalds设计,他也是Linux内核架构师,用于处理内核源代码,因此它自然具有Linux思维模式,并且期望文件命名不同的文件是不同的文件. 对于大多数用途而言,这并不重要,但是您遇到了其中一种情况,即如果将git存储库中的多个文件克隆到不区分大小写的文件系统,则它们具有相同的名称.再次给出“A.txt”和“a.txt”,对于Linux,两个文件将在克隆之后存在,但对于OS X上的默认HFS文件系统,只存在一个文件,即创建最后一个文件(然后将覆盖)一个. 请注意,git仍然认为这两个文件都存在,因为文件系统都会在询问时显示“A.txt”和“a.txt”.这就是为什么你没有被告知他们中的一个人失踪的原因. 治愈很简单.使用区分大小写的文件系统来完成工作.对于OS X,最简单的方法是使用“磁盘工具”创建适当的磁盘映像 – >文件 – > New Image并选择正确版本的OS X扩展为格式.然后双击图像以安装它,并在Terminal.app中导航到它.然后做克隆.你现在应该有合适的来源. 但请注意,您很可能无法对其进行任何操作,例如构建或类似操作,因为OS X编译器工具链与Linux工具链有很大不同.如果要编译新内核,最简单的方法是在Linux上执行. Virtualbox和Ubuntu 16.04对我来说效果很好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |