带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”上开始…