当我在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;
};
系统信息:
~/.gitconfig
只有[user]
条目。发生了什么事?为什么在克隆后立即修改文件?
答案 0 :(得分:8)
即使OS X是一个Unix系统,它仍然与最着名的Unix克隆Linux有很大不同。这是由于历史原因,因为OS X本质上是NextStep(在它的时代是Unix的革命版本),有很多FreeBSD的东西,Linux是一个从头开始编写的内核,有很多GNU的东西,以及OS X的政治原因都是为了接替MacOS 9而设计的。
因此,习惯上默认的HFS文件系统不区分大小写(如Windows NTFS),而传统上区分大小写的是Linux。换句话说 - &#34; A.txt&#34;和&#34; a.txt&#34;是否引用相同的文件?
Git是由Linus Torvalds设计的,他也是Linux内核架构师用于处理内核源代码,所以很自然它有一个Linux思维模式,并期望文件的名称与不同不同的文件。
对于大多数用途而言,这并不重要,但是您遇到了其中一种情况,即如果您将gix存储库中的多个文件克隆到不区分大小写的文件系统中,则它们具有相同的名称。鉴于&#34; A.txt&#34;和&#34; a.txt&#34;再次,对于Linux,两个文件将在克隆之后存在,但对于OS X上的默认HFS文件系统,仅存在一个文件,即创建最后一个(然后将覆盖前一个)文件的文件。
请注意,git仍然认为这两个文件都存在,因为文件系统都表示&#34; A.txt&#34;和&#34; a.txt&#34;当被问到时,他们在场这就是为什么你没有被告知其中一个人失踪的原因。
治愈很简单。使用区分大小写的文件系统来完成工作。对于OS X,最简单的方法是使用“磁盘工具”创建适当的磁盘映像 - &gt;档案 - &gt; New Image并选择正确版本的OS X扩展为格式。然后双击图像以安装它,并在Terminal.app中导航到它。然后做克隆。你现在应该有合适的资源。
但请注意,您很可能无法对其进行任何操作,例如构建或类似操作,因为OS X编译器工具链与Linux工具链有很大不同。如果要编译新内核,最简单的方法是在Linux上执行。 Virtualbox和Ubuntu 16.04对我来说效果非常好。