代码之家  ›  专栏  ›  技术社区  ›  davidA

Git&Cygwin-尾随空格导致“未更新”[关闭]

  •  1
  • davidA  · 技术社区  · 15 年前

    带cygwin的窗口上的git充满了危险。但是有一个开始困扰我。

    它与核心有关。autocrlf=真正的行为。在花了一个星期的时间在网上搜索之后,很明显,你会遇到的问题在这套游戏中并不那么糟糕。但是,如果一个文件的末尾有一行尾随空格,那么它似乎会造成一个主要问题。

    问题是Git认为该文件有局部修改,即使它没有。例如,在全新的新克隆之后,“git status”或“git diff”将立即显示任何修改过的文件。一个“git reset--hard”就可以了,但是这些文件仍然显示为modified。git diff'将差异显示为“删除空行,添加空行”。

    问题是,这阻止了一个吉特拉!

    $ git pull
    Updating 73bcc56..dba6253
    error: Entry 'foo.py' not uptodate. Cannot merge.
    $ git reset --hard
    HEAD is now at 73bcc56 ...
    $ git diff
    diff --git a/foo.py b/foo.py
    index 4cc3854..ccde3f6 100644
    --- a/foo.py
    +++ b/foo.py
    @@ -14,7 +14,7 @@ class TestHelpFunctions(unittest.TestCase):
         def testVersion(self):
             v = sendCommand("version")
             self.assertEqual(len(v), 2)
    -
    +
    

    好吧,我想-当地有变化。如果我把它藏起来怎么办?不-在git存储之后,它仍然显示本地更改的文件。

    好吧,如果我加上它怎么办?当然,这仍然阻碍了一个拉动:

    $ git add foo.py
    $ git pull
    Updating 73bcc56..dba6253
    error: Entry 'foo.py' would be overwritten by merge. Cannot merge.
    

    好的,最后一次尝试-让我们提交并完成它。哦,太好了,这个文件有冲突。但令人惊讶的是,该文件没有冲突标记!不幸的是,“git pull”现在抱怨我正处于一个冲突合并的中间,即使没有标记冲突。

    我发现,解决方法是永远不要在换行符之前提交带有尾随空格的文件。它只会让Git认为文件是在不修改的时候修改的,可能是由于DOS-Unix行结束逻辑明显被破坏了。

    不管怎么说,我不是真的在找答案,因为最后我把整个东西都碰了一下,然后躺下了。我真正想知道的是,当任何人试图使用Git和Cygwin时,如何保持他们的理智。

    当目录被称为“foo”时,不要让我在“git add foo/a foo/b foo/c”上开始…

    1 回复  |  直到 15 年前
        1
  •  2
  •   Community WizardZ    7 年前

    根据我的经验,我的所有文件都使用unix eol样式,并且我总是设置 core.autocrlf 错了。
    看到这个 SO answer

    发生的任何事情” automagically “,尤其是在分布式环境中(您不能保证在远程存储库上进行相同的设置),这会带来麻烦。

    基本上,如果你的工具(比如 used for merge )如果设置正确,他们将处理任何空间/EOL问题。不是直接的Git。