Git:无法丢弃因行结尾而导致的更改?

时间:2015-07-24 19:51:44

标签: windows git

“突然之间”我已经开始使用我在GitHub上托管的git存储库来解决这个问题。

每当我将一个远程分支拉到我的计算机上时(甚至在存储库的第一个克隆上),任意(?)文件集都会显示为“未提交的更改”。我在Windows 8.1上运行并使用SourceTreeGit Bash一起作为git客户端。

检查这些文件中的更改表明它们中没有任何变化,除了行结尾。我不知道如何在差异时查看行结尾,所以无法确定。

当我尝试“丢弃”这些更改时,它根本不起作用。 df$added <- unlist(lapply(split(df, df$group), function(x) { c(x[,'occurs'][cumsum(x[,'occurs']) == 0L], cumsum(x[,'numToAdd'][cumsum(x[,'occurs']) != 0L])) })) # group numToAdd occurs added # 1 1 1 0 0 # 2 1 1 0 0 # 3 1 3 1 3 # 4 1 2 0 5 # 5 2 4 0 0 # 6 2 2 1 2 # 7 2 1 0 3 # 8 2 3 0 6 # 9 2 2 0 8 # 10 3 1 0 0 # 11 3 2 1 2 # 12 3 1 1 3 # 13 4 2 0 0 # 14 4 3 0 0 # 15 4 2 0 0 根本无效,更改仍然存在。

为什么会这样?我怎么能让它消失? :)

PS - 当我运行git reset --hard时,我看到git config -l在列表中出现了3次。

PPS - 我在存储库的根目录中有一个core.autocrlf=true文件。删除它对上述症状没有任何影响。它是几天前首次添加的。除了文件开头的.gitattributes之外,它都被注释掉了。

更新

我找到了重现问题的最低步骤:

  1. 我在文本编辑器中打开一个文件,在某处添加一个空格并保存。
  2. 该文件显示在“未提交的更改”(显然)下。
  3. 我从文件中删除单个空格并保存。
  4. 该文件保留在“未提交更改的更改”下,即使SourceTree的diff和Kdiff3都显示该文件的二进制文件等于其先前版本。
  5. 请注意,在我编辑之前和编辑之后,此示例中的文件具有CRLF行结尾 - 我不明白为什么git坚持将文件标记为已更改。

    更新2:

    运行* text=auto,其中MyProject.app / config是标记为已更改的文件之一:

    git diff --raw MyProject/app.config

    第二个SHA1全为零的事实看起来像是我的线索 - 但我不知道这意味着什么。

3 个答案:

答案 0 :(得分:1)

在事后设置core.autocrlf时,这是一个常见问题。您可以从GitHub帮助中尝试this procedure。另一个简单的解决方案是只删除存储库的新本地副本,如果您仍然遇到问题,这也是一个很好的故障排除步骤。

答案 1 :(得分:1)

更新3 :我能够通过从存储库的根目录中删除.gitattributes文件来解决我的问题。

首先将此文件添加到repo中的最可能的疑问是Visual Studio 2013是this Microsoft Connect issue

我仍然不明白为什么有这个文件(其中包含core.autocrlf=true)会导致我观察到的行为。如果有人有一个很好的解释,请将其作为答案发布,我会接受它。

答案 2 :(得分:1)

关于dealing with line endings上的github文章,您可以看到在.gitattributes文件上设置text = auto告诉git以&#34;以其认为最好的方式处理文件。&#34;看到文件的其余部分已被注释,并且您在text = auto上有一个星标,这适用于所有内容。我认为,在你的情况下,git认为最好的,结果是错误的选择。