克隆一个git repo,它已经有一个脏工作目录...... Whaaaaa?

时间:2011-09-12 04:51:07

标签: git

所以,我对发生了什么感到困惑。我从来没有攻击过linux内核,所以也许这很常见。如果是这种情况,抱歉新问题。

$ git clone https://github.com/torvalds/linux.git

然后,

$ git status

# On branch 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/linux/netfilter/xt_CONNMARK.h
#   modified:   include/linux/netfilter/xt_DSCP.h
#   modified:   include/linux/netfilter/xt_MARK.h
#   modified:   include/linux/netfilter/xt_RATEEST.h
#   modified:   include/linux/netfilter/xt_TCPMSS.h
#   modified:   include/linux/netfilter_ipv4/ipt_ECN.h
#   modified:   include/linux/netfilter_ipv4/ipt_TTL.h
#   modified:   include/linux/netfilter_ipv6/ip6t_HL.h
#   modified:   net/ipv4/netfilter/ipt_ECN.c
#   modified:   net/netfilter/xt_DSCP.c
#   modified:   net/netfilter/xt_HL.c
#   modified:   net/netfilter/xt_RATEEST.c
#   modified:   net/netfilter/xt_TCPMSS.c
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   samples/hidraw/

这是什么交易?

编辑:git diff output:

diff --git a/include/linux/netfilter/xt_CONNMARK.h b/include/linux/netfilter/xt_CONNMARK.h
index 2f2e48e..efc17a8 100644
--- a/include/linux/netfilter/xt_CONNMARK.h
+++ b/include/linux/netfilter/xt_CONNMARK.h
@@ -1,6 +1,31 @@
-#ifndef _XT_CONNMARK_H_target
-#define _XT_CONNMARK_H_target
+#ifndef _XT_CONNMARK_H
+#define _XT_CONNMARK_H

-#include <linux/netfilter/xt_connmark.h>
+#include <linux/types.h>

-#endif /*_XT_CONNMARK_H_target*/
+/* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com>
+ * by Henrik Nordstrom <hno@marasystems.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+enum {
+   XT_CONNMARK_SET = 0,
+   XT_CONNMARK_SAVE,
+   XT_CONNMARK_RESTORE
+};
+
+struct xt_connmark_tginfo1 {
+   __u32 ctmark, ctmask, nfmask;
+   __u8 mode;
+};
+
+struct xt_connmark_mtinfo1 {
+   __u32 mark, mask;
+   __u8 invert;
+};
+
+#endif /*_XT_CONNMARK_H*/
diff --git a/include/linux/netfilter/xt_DSCP.h b/include/linux/netfilter/xt_DSCP.h
index 648e0b3..15f8932 100644
--- a/include/linux/netfilter/xt_DSCP.h
+++ b/include/linux/netfilter/xt_DSCP.h
@@ -1,26 +1,31 @@
-/* x_tables module for setting the IPv4/IPv6 DSCP field
+/* x_tables module for matching the IPv4/IPv6 DSCP field
  *
  * (C) 2002 Harald Welte <laforge@gnumonks.org>
- * based on ipt_FTOS.c (C) 2000 by Matthew G. Marsh <mgm@paktronix.com>
  * This software is distributed under GNU GPL v2, 1991
  *
  * See RFC2474 for a description of the DSCP field within the IP Header.
  *
- * xt_DSCP.h,v 1.7 2002/03/14 12:03:13 laforge Exp
+ * xt_dscp.h,v 1.3 2002/08/05 19:00:21 laforge Exp
 */
-#ifndef _XT_DSCP_TARGET_H
-#define _XT_DSCP_TARGET_H
-#include <linux/netfilter/xt_dscp.h>
+#ifndef _XT_DSCP_H
+#define _XT_DSCP_H
+
 #include <linux/types.h>

-/* target info */
-struct xt_DSCP_info {
+#define XT_DSCP_MASK   0xfc    /* 11111100 */
+#define XT_DSCP_SHIFT  2
+#define XT_DSCP_MAX    0x3f    /* 00111111 */
+
+/* match info */
+struct xt_dscp_info {
    __u8 dscp;
+   __u8 invert;
 };

-struct xt_tos_target_info {
-   __u8 tos_value;
+struct xt_tos_match_info {
    __u8 tos_mask;
+   __u8 tos_value;
+   __u8 invert;
 };

-#endif /* _XT_DSCP_TARGET_H */
+#endif /* _XT_DSCP_H */
diff --git a/include/linux/netfilter/xt_MARK.h b/include/linux/netfilter/xt_MARK.h
index 41c456d..ecadc40 100644
--- a/include/linux/netfilter/xt_MARK.h
+++ b/include/linux/netfilter/xt_MARK.h
@@ -1,6 +1,15 @@
-#ifndef _XT_MARK_H_target
-#define _XT_MARK_H_target
+#ifndef _XT_MARK_H
+#define _XT_MARK_H

-#include <linux/netfilter/xt_mark.h>
+#include <linux/types.h>

-#endif /*_XT_MARK_H_target */
+struct xt_mark_tginfo2 {
+   __u32 mark, mask;
+};
+
+struct xt_mark_mtinfo1 {
+   __u32 mark, mask;
+   __u8 invert;
+};
+
+#endif /*_XT_MARK_H*/
diff --git a/include/linux/netfilter/xt_RATEEST.h b/include/linux/netfilter/xt_RATEEST.h
index 6605e20..d40a619 100644
--- a/include/linux/netfilter/xt_RATEEST.h
+++ b/include/linux/netfilter/xt_RATEEST.h
@@ -1,15 +1,37 @@
-#ifndef _XT_RATEEST_TARGET_H
-#define _XT_RATEEST_TARGET_H
+#ifndef _XT_RATEEST_MATCH_H
+#define _XT_RATEEST_MATCH_H

 #include <linux/types.h>

-struct xt_rateest_target_info {
-   char            name[IFNAMSIZ];
-   __s8            interval;
-   __u8        ewma_log;
+enum xt_rateest_match_flags {
+   XT_RATEEST_MATCH_INVERT = 1<<0,
+   XT_RATEEST_MATCH_ABS    = 1<<1,
+   XT_RATEEST_MATCH_REL    = 1<<2,
+   XT_RATEEST_MATCH_DELTA  = 1<<3,
+   XT_RATEEST_MATCH_BPS    = 1<<4,
+   XT_RATEEST_MATCH_PPS    = 1<<5,
+};
+
+enum xt_rateest_match_mode {
+   XT_RATEEST_MATCH_NONE,
+   XT_RATEEST_MATCH_EQ,
+   XT_RATEEST_MATCH_LT,
+   XT_RATEEST_MATCH_GT,
+};
+
+struct xt_rateest_match_info {
+   char            name1[IFNAMSIZ];
+   char            name2[IFNAMSIZ];
+   __u16       flags;
+   __u16       mode;
+   __u32       bps1;
+   __u32       pps1;
+   __u32       bps2;
+   __u32       pps2;

    /* Used internally by the kernel */
-   struct xt_rateest   *est __attribute__((aligned(8)));
+   struct xt_rateest   *est1 __attribute__((aligned(8)));
+   struct xt_rateest   *est2 __attribute__((aligned(8)));
 };

-#endif /* _XT_RATEEST_TARGET_H */
+#endif /* _XT_RATEEST_MATCH_H */
diff --git a/include/linux/netfilter/xt_TCPMSS.h b/include/linux/netfilter/xt_TCPMSS.h
index 9a6960a..fbac56b 100644
--- a/include/linux/netfilter/xt_TCPMSS.h
+++ b/include/linux/netfilter/xt_TCPMSS.h
@@ -1,12 +1,11 @@
-#ifndef _XT_TCPMSS_H
-#define _XT_TCPMSS_H
+#ifndef _XT_TCPMSS_MATCH_H
+#define _XT_TCPMSS_MATCH_H

 #include <linux/types.h>

-struct xt_tcpmss_info {
-   __u16 mss;
+struct xt_tcpmss_match_info {
+    __u16 mss_min, mss_max;
+    __u8 invert;
 };

-#define XT_TCPMSS_CLAMP_PMTU 0xffff
-
-#endif /* _XT_TCPMSS_H */
+#endif /*_XT_TCPMSS_MATCH_H*/
diff --git a/include/linux/netfilter_ipv4/ipt_ECN.h b/include/linux/netfilter_ipv4/ipt_ECN.h
index bb88d53..eabf95f 100644
--- a/include/linux/netfilter_ipv4/ipt_ECN.h
+++ b/include/linux/netfilter_ipv4/ipt_ECN.h
@@ -1,33 +1,35 @@
-/* Header file for iptables ipt_ECN target
+/* iptables module for matching the ECN header in IPv4 and TCP header
  *
- * (C) 2002 by Harald Welte <laforge@gnumonks.org>
+ * (C) 2002 Harald Welte <laforge@gnumonks.org>
  *
  * This software is distributed under GNU GPL v2, 1991
  * 
- * ipt_ECN.h,v 1.3 2002/05/29 12:17:40 laforge Exp
+ * ipt_ecn.h,v 1.4 2002/08/05 19:39:00 laforge Exp
 */
-#ifndef _IPT_ECN_TARGET_H
-#define _IPT_ECN_TARGET_H
+#ifndef _IPT_ECN_H
+#define _IPT_ECN_H

 #include <linux/types.h>
-#include <linux/netfilter/xt_DSCP.h>
+#include <linux/netfilter/xt_dscp.h>

 #define IPT_ECN_IP_MASK    (~XT_DSCP_MASK)

-#define IPT_ECN_OP_SET_IP  0x01    /* set ECN bits of IPv4 header */
-#define IPT_ECN_OP_SET_ECE 0x10    /* set ECE bit of TCP header */
-#define IPT_ECN_OP_SET_CWR 0x20    /* set CWR bit of TCP header */
+#define IPT_ECN_OP_MATCH_IP    0x01
+#define IPT_ECN_OP_MATCH_ECE   0x10
+#define IPT_ECN_OP_MATCH_CWR   0x20

-#define IPT_ECN_OP_MASK        0xce
+#define IPT_ECN_OP_MATCH_MASK  0xce

-struct ipt_ECN_info {
-   __u8 operation; /* bitset of operations */
-   __u8 ip_ect;    /* ECT codepoint of IPv4 header, pre-shifted */
+/* match info */
+struct ipt_ecn_info {
+   __u8 operation;
+   __u8 invert;
+   __u8 ip_ect;
    union {
        struct {
-           __u8 ece:1, cwr:1; /* TCP ECT bits */
+           __u8 ect;
        } tcp;
    } proto;
 };

-#endif /* _IPT_ECN_TARGET_H */
+#endif /* _IPT_ECN_H */
diff --git a/include/linux/netfilter_ipv4/ipt_TTL.h b/include/linux/netfilter_ipv4/ipt_TTL.h
index f6ac169..37bee44 100644
--- a/include/linux/netfilter_ipv4/ipt_TTL.h
+++ b/include/linux/netfilter_ipv4/ipt_TTL.h
@@ -1,5 +1,5 @@
-/* TTL modification module for IP tables
- * (C) 2000 by Harald Welte <laforge@netfilter.org> */
+/* IP tables module for matching the value of the TTL
+ * (C) 2000 by Harald Welte <laforge@gnumonks.org> */

 #ifndef _IPT_TTL_H
 #define _IPT_TTL_H
@@ -7,14 +7,14 @@
 #include <linux/types.h>

 enum {
-   IPT_TTL_SET = 0,
-   IPT_TTL_INC,
-   IPT_TTL_DEC
+   IPT_TTL_EQ = 0,     /* equals */
+   IPT_TTL_NE,     /* not equals */
+   IPT_TTL_LT,     /* less than */
+   IPT_TTL_GT,     /* greater than */
 };

-#define IPT_TTL_MAXMODE    IPT_TTL_DEC

-struct ipt_TTL_info {
+struct ipt_ttl_info {
    __u8    mode;
    __u8    ttl;
 };
diff --git a/include/linux/netfilter_ipv6/ip6t_HL.h b/include/linux/netfilter_ipv6/ip6t_HL.h
index ebd8ead..6e76dbc 100644
--- a/include/linux/netfilter_ipv6/ip6t_HL.h
+++ b/include/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;
 };
diff --git a/net/ipv4/netfilter/ipt_ECN.c b/net/ipv4/netfilter/ipt_ECN.c
index 4bf3dc4..2b57e52 100644
--- a/net/ipv4/netfilter/ipt_ECN.c
+++ b/net/ipv4/netfilter/ipt_ECN.c
@@ -1,138 +1,127 @@
-/* iptables module for the IPv4 and TCP ECN bits, Version 1.5
+/* IP tables module for matching the value of the IPv4 and TCP ECN bits
  *
- * (C) 2002 by Harald Welte <laforge@netfilter.org>
+ * (C) 2002 by Harald Welte <laforge@gnumonks.org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
-*/
+ */
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 #include <linux/in.h>
-#include <linux/module.h>
-#include <linux/skbuff.h>
 #include <linux/ip.h>
 #include <net/ip.h>
+#include <linux/module.h>
+#include <linux/skbuff.h>
 #include <linux/tcp.h>
-#include <net/checksum.h>

 #include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv4/ip_tables.h>
-#include <linux/netfilter_ipv4/ipt_ECN.h>
+#include <linux/netfilter_ipv4/ipt_ecn.h>

-MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
-MODULE_DESCRIPTION("Xtables: Explicit Congestion Notification (ECN) flag modification");
+MODULE_DESCRIPTION("Xtables: Explicit Congestion Notification (ECN) flag match for IPv4");
+MODULE_LICENSE("GPL");

-/* set ECT codepoint from IP header.
- *     return false if there was an error. */
-static inline bool
-set_ect_ip(struct sk_buff *skb, const struct ipt_ECN_info *einfo)
+static inline bool match_ip(const struct sk_buff *skb,
+               const struct ipt_ecn_info *einfo)
 {
-   struct iphdr *iph = ip_hdr(skb);
-
-   if ((iph->tos & IPT_ECN_IP_MASK) != (einfo->ip_ect & IPT_ECN_IP_MASK)) {
-       __u8 oldtos;
-       if (!skb_make_writable(skb, sizeof(struct iphdr)))
-           return false;
-       iph = ip_hdr(skb);
-       oldtos = iph->tos;
-       iph->tos &= ~IPT_ECN_IP_MASK;
-       iph->tos |= (einfo->ip_ect & IPT_ECN_IP_MASK);
-       csum_replace2(&iph->check, htons(oldtos), htons(iph->tos));
-   }
-   return true;
+   return ((ip_hdr(skb)->tos & IPT_ECN_IP_MASK) == einfo->ip_ect) ^
+          !!(einfo->invert & IPT_ECN_OP_MATCH_IP);
 }

-/* Return false if there was an error. */
-static inline bool
-set_ect_tcp(struct sk_buff *skb, const struct ipt_ECN_info *einfo)
+static inline bool match_tcp(const struct sk_buff *skb,
+                const struct ipt_ecn_info *einfo,
+                bool *hotdrop)
 {
-   struct tcphdr _tcph, *tcph;
-   __be16 oldval;
-
-   /* Not enough header? */
-   tcph = skb_header_pointer(skb, ip_hdrlen(skb), sizeof(_tcph), &_tcph);
-   if (!tcph)
+   struct tcphdr _tcph;
+   const struct tcphdr *th;
+
+   /* In practice, TCP match does this, so can't fail.  But let's
+    * be good citizens.
+    */
+   th = skb_header_pointer(skb, ip_hdrlen(skb), sizeof(_tcph), &_tcph);
+   if (th == NULL) {
+       *hotdrop = false;
        return false;
+   }

-   if ((!(einfo->operation & IPT_ECN_OP_SET_ECE) ||
-        tcph->ece == einfo->proto.tcp.ece) &&
-       (!(einfo->operation & IPT_ECN_OP_SET_CWR) ||
-        tcph->cwr == einfo->proto.tcp.cwr))
-       return true;
-
-   if (!skb_make_writable(skb, ip_hdrlen(skb) + sizeof(*tcph)))
-       return false;
-   tcph = (void *)ip_hdr(skb) + ip_hdrlen(skb);

...

(截断,因为它将超过stackoveflow post body限制。)

7 个答案:

答案 0 :(得分:17)

您使用的是哪种操作系统?此错误是由于您的文件系统不区分大小写,如Mac OS X上的默认值。

答案 1 :(得分:5)

所以,你已经检查了一个不区分大小写的文件系统上的linux源代码。那就是问题所在。尝试检查ext2分区。

作为一种解决方法,您还可以使用git sparsecheckout功能:

git config core.sparsecheckout true
echo /* > .git/info/sparse-checkout 
echo !include/linux/netfilter/ > .git/info/sparse-checkout 
echo !include/linux/netfilter_ipv4/ > .git/info/sparse-checkout 
echo !include/linux/netfilter_ipv6/ > .git/info/sparse-checkout 
echo !net/ipv4/netfilter/ > .git/info/sparse-checkout 
echo !net/netfilter > .git/info/sparse-checkout
git read-tree --reset -u HEAD

答案 2 :(得分:2)

这些评论很可能是因为他们怀疑行结尾。尝试设置此选项:

git config --global core.autocrlf true

然后重新克隆存储库。

在Windows上使用true的值,在OSX / Unix上使用input

请查看this Github help page了解详情。

答案 3 :(得分:1)

你可以尝试的一件事是git update-index --refresh以防万一。在克隆过程中(可能通过ntpd时钟调整等等),filestat信息的缓存会被记录下来。如果这没有帮助,我们可能需要知道git diff的输出是什么样的,以帮助您更多。

答案 4 :(得分:1)

  

此错误是由文件系统不区分大小写引起的

您不再需要进行猜测,而无需使用Git 2.20(2018年第四季度,OP之后的七年)

的确,对包含两个路径名不同的文件的项目运行“ git clone”仅在不区分大小写的文件系统上使用时会导致其中一个文件丢失,因为基础文件系统无法同时保存两个文件同时。
但是,现在...正在尝试检测到这种情况并发出警告

请参见commit b878579Duy Nguyen (pclouds)(2018年8月17日)。
(由Junio C Hamano -- gitster --commit c240732中合并,2018年9月17日)

  

clone:报告不区分大小写的文件系统上的重复条目

     

仅区分大小写的路径在区分大小写的文件系统中可以正常工作,但是如果将这些存储库克隆到不区分大小写的文件系统中,则会遇到问题。首先要注意的是,“ git status”永远不会是干净的,而不会表明“ dirty”的确切含义。

     

此修补程序通过在克隆时指出问题来对情况有所帮助。
  即使此修补程序讨论了区分大小写的问题,该修补程序也不假设文件系统会折叠规则。它只是观察到,如果在我们要编写新路径时在克隆时已经检查了某个条目,则后面会包含一些折叠规则。

     

如果我们不能依靠文件系统(通过inode号)来进行此检查,请退回到fspathcmp(),这虽然不完美,但不应给出误报。

您会看到unpack-trees.c具有新的report_collided_checkout()功能,该功能将显示警告:

the following paths have collided (e.g. case-sensitive paths
on a case-insensitive filesystem) and only one from the same
colliding group is in the working tree:

这里没有更多的惊喜。

答案 5 :(得分:1)

遇到同样的问题,但是已经快8年了,Windows现在支持区分大小写的文件夹。

fsutil.exe file setCaseSensitiveInfo <folder path> enable

然后重新同步文件夹。 请注意,这不会影响子目录,因此需要为每个文件夹运行此命令。

答案 6 :(得分:0)

最简单的解决方案是git mv

$ git mv include/linux/netfilter/xt_CONNMARK.h include/linux/netfilter/xt_CONNMARK.h2

那么你有

$ git status
...
    renamed:    include/linux/netfilter/xt_CONNMARK.h -> include/linux/netfilter/xt_CONNMARK.h2
...
    deleted     include/linux/netfilter/xt_CONNMARK.h

然后取消更改:

$ git checkout include/linux/netfilter/xt_CONNMARK.h

之后,您将拥有:

$ ls -la
include/linux/netfilter/xt_CONNMARK.h
include/linux/netfilter/xt_CONNMARK.h2