Git 吉特公司;Cygwin-尾随空格原因“;不是最新的”;

Git 吉特公司;Cygwin-尾随空格原因“;不是最新的”;,git,merge,cygwin,line-endings,Git,Merge,Cygwin,Line Endings,带Cygwin的Windows上的Git充满了危险。然而,有一个问题真的开始困扰我了 它与核心相关。autocrlf=真实行为。在花了一周的时间拖网之后,很明显,你会遇到的问题在这一组中没有那么严重。但是,如果文件末尾有一行尾随空格,则可能会产生严重问题 问题是git认为该文件有本地修改,即使它没有。例如,在一个全新的新克隆之后,“git status”或“git diff”会立即将任何此类文件显示为已修改。一个“git reset--hard”完成了它的功能,但是这些文件仍然显示为修改过的gi

带Cygwin的Windows上的Git充满了危险。然而,有一个问题真的开始困扰我了

它与核心相关。autocrlf=真实行为。在花了一周的时间拖网之后,很明显,你会遇到的问题在这一组中没有那么严重。但是,如果文件末尾有一行尾随空格,则可能会产生严重问题

问题是git认为该文件有本地修改,即使它没有。例如,在一个全新的新克隆之后,“git status”或“git diff”会立即将任何此类文件显示为已修改。一个“git reset--hard”完成了它的功能,但是这些文件仍然显示为修改过的git diff’将差异显示为“删除空行,添加空行”

问题是,这会阻止git拉

$ 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 Road”现在抱怨我处于一个矛盾的合并过程中,即使没有冲突。

我发现,解决办法是永远不要在换行之前提交带有尾随空格的文件。这只会让git认为文件被修改了,而实际上并没有,这可能是因为DOS-UNIX的行尾逻辑显然被破坏了

不管怎么说,我并不是真的在寻找答案,因为最后我只是用核武器把整个事情炸了,然后躺了下来。我真正想知道的是,当试图将git与Cygwin一起使用时,人们是如何保持理智的


当目录名为“foo”时,不要让我开始使用“git add foo/a foo/b foo/c”…

根据我的经验,我所有的文件都使用UNIX eol样式,并且我总是将
core.autocrlf
设置为false。
看到这个了吗

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


基本上,如果您的工具(如一个)设置正确,它们将处理任何空间/下线问题。不是直接的问题。

我理解你的沮丧,但不幸的是,这种咆哮没有具体的答案,所以很可能会被选为“不是真正的问题”。好吧,你真的是对的。但我认为这里有一个问题——为什么git会这样做?是否使用钩子来确保带有尾随空格的文件不会被推送的唯一选项?我很想知道其他人是如何处理这个问题的,因为我很难相信我是唯一一个使用git和Cygwin的人。也许你可以重新考虑你的-1投票,至少足够长的时间,让任何可能解决了这个问题的人都能看到这个问题。我相信你确实有一个有效的问题在那里,也许值得再次(以一种不那么尖刻的方式)重新表述你的问题。我自己不使用Git和Cygwin,但我知道还有其他人在使用Git。