Git的奇怪行为:神秘的变化无法撤销

我看到Git中的行为对我来说似乎很神秘。我保留了Github的Linux存储库的副本,以便在本地使用Git。需要明确的是,我在这个存储库中没有做很多事情:我获取更改,更新master,签出特定版本,有时我尝试使用Git

GUI来查看大型项目的可视化外观。TLDR版本: 。

回答:

今天早些时候,我master从Github 签出并撤消了更改。一切似乎一切顺利。但是我怀疑实际上没有。这就是现在的git status样子。

axel@macbook ~/Depots/linux $ 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/

no changes added to commit (use "git add" and/or "git commit -a")

我想知道这些变化从何而来。现在来了最糟糕的部分。让我们看看如果我尝试删除这些文件并再次检出它们会发生什么。

axel@macbook ~/Depots/linux $ rm -Rf include net

axel@macbook ~/Depots/linux $ git checkout -- .

axel@macbook ~/Depots/linux $ 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/

no changes added to commit (use "git add" and/or "git commit -a")

好吧,同样的事情。该git checkout操作似乎产生具有神秘变化的文件。我试图进行进一步的调查,并且 。参见git diff下面的开头

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.

+ */

如果我了解这项权利,这说明仅通过更改某些行尾无法进行更改,对吗?我做的最后一件事是:尝试找出更改的发起者,但显然那没有用。请参阅以下git

blame输出。

axel@macbook ~/Depots/linux $ git blame include/linux/netfilter/xt_CONNMARK.h

00000000 (Not Committed Yet 2011-10-25 20:00:56 +0200 1) #ifndef _XT_CONNMARK_H

00000000 (Not Committed Yet 2011-10-25 20:00:56 +0200 2) #define _XT_CONNMARK_H

2e4e6a17 (Harald Welte 2006-01-12 13:30:04 -0800 3)

00000000 (Not Committed Yet 2011-10-25 20:00:56 +0200 4) #include <linux/types.h>

0dc8c760 (Jan Engelhardt 2008-01-14 23:38:34 -0800 5)

00000000 (Not Committed Yet 2011-10-25 20:00:56 +0200 6) /* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com>

00000000 (Not Committed Yet 2011-10-25 20:00:56 +0200 7) * by Henrik Nordstrom <hno@marasystems.com>

00000000 (Not Committed Yet 2011-10-25 20:00:56 +0200 8) *

00000000 (Not Committed Yet 2011-10-25 20:00:56 +0200 9) * This program is free software; you can redistribute it and/or modify

00000000 (Not Committed Yet 2011-10-25 20:00:56 +0200 10) * it under the terms of the GNU General Public License as published by

00000000 (Not Committed Yet 2011-10-25 20:00:56 +0200 11) * the Free Software Foundation; either version 2 of the License, or

00000000 (Not Committed Yet 2011-10-25 20:00:56 +0200 12) * (at your option) any later version.

00000000 (Not Committed Yet 2011-10-25 20:00:56 +0200 13) */

回答:

我想念什么?我什么时候会出错,以及如何解决?感谢您的提示和评论!

回答:

Linux源代码树的文件名仅大小写不同,这会在不区分大小写的文件系统的系统上引起 有趣的 故障。

您需要区分大小写的文件系统才能使用Linux源代码。

include/linux/netfilter/xt_connmark.hinclude/linux/netfilter/xt_CONNMARK.h是Git存储库中的两个不同文件,但是如果您的文件系统不区分大小写,那么一次结帐中只能存在一个。)

以上是 Git的奇怪行为:神秘的变化无法撤销 的全部内容, 来源链接: utcz.com/qa/410086.html

回到顶部