3

我刚刚在侧窗 7 上安装了 ubuntu。我所有的 git 本地工作文件夹都在一个单独的数据分区上。

一切都在 Windows 7 的 git 中提交,但在 ubuntu 的 git 中,运行git status显示所有内容都已修改。当我尝试git log所有的历史仍然存在。

我不想每次切换到其他操作系统工作时都提交所有内容。有解决办法吗?

4

3 回答 3

4

您的问题是,当您使用 git 默认配置在 Windows 上签出文件时,它们是CRLF在您的工作目录中以(Windows 默认)行结尾创建的,但LF为了跨平台兼容性而提交。

现在你的 LinuxCRLF在每一行都看到了,并说它LF与 repo 中的不同。这就是为什么每行都报告为不同的原因。

我建议将行尾设置为LFWindows。在之前的答案中,我解释了如何做到这一点的细节。遵循这些步骤还将在 linux 上启用行尾规范化LF,如果您不小心CRLF在 windows 上创建了一些并稍后在 linux 中提交,这将避免出现问题。

您也可以完全禁用行尾规范化,但这可能会在将来造成麻烦,除非您只使用一组完全固定的编辑器,您非常了解其行尾处理。

于 2013-08-06T11:26:48.370 回答
2

问题是 Windows 上的换行约定与 Linux 不同,因此在 Ubuntu 端,每个文件看起来都已被完全修改(在每行末尾添加了一个 CR)。这通常是因为 repo 以某种级别签出autocrlf: 在 repo 中,文件具有 LF 约定,但在 Windows 上签出时,文件具有 CRLF 行结尾。

如果您想安全地与 Windows 和 Linux 共享您的工作副本,您应该关闭core.autocrlf.

于 2013-08-06T11:09:12.897 回答
0

我猜是行尾有问题。您可能已经提交了带有 windows 行尾的代码,并且当您在 ubuntu 中签出代码时,git 将这些代码转换为 unix 样式的行尾。

看看这个页面处理行尾

于 2013-08-06T11:08:34.937 回答