$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]条目.
解决方法
因此,通常默认的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对我来说效果很好.