微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

克隆后立即在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 10.11.5(15F34)
> git版本:2.9.0
>〜/ .gitconfig只有[user]条目.

到底是怎么回事?为什么在克隆后立即修改文件

解决方法

即使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对我来说效果很好.

原文地址:https://www.jb51.cc/linux/393264.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐