我刚刚在侧窗 7 上安装了 ubuntu。我所有的 git 本地工作文件夹都在一个单独的数据分区上。
一切都在 Windows 7 的 git 中提交,但在 ubuntu 的 git 中,运行git status
显示所有内容都已修改。当我尝试git log
所有的历史仍然存在。
我不想每次切换到其他操作系统工作时都提交所有内容。有解决办法吗?
您的问题是,当您使用 git 默认配置在 Windows 上签出文件时,它们是CRLF
在您的工作目录中以(Windows 默认)行结尾创建的,但LF
为了跨平台兼容性而提交。
现在你的 LinuxCRLF
在每一行都看到了,并说它LF
与 repo 中的不同。这就是为什么每行都报告为不同的原因。
我建议将行尾设置为LF
Windows。在之前的答案中,我解释了如何做到这一点的细节。遵循这些步骤还将在 linux 上启用行尾规范化LF
,如果您不小心CRLF
在 windows 上创建了一些并稍后在 linux 中提交,这将避免出现问题。
您也可以完全禁用行尾规范化,但这可能会在将来造成麻烦,除非您只使用一组完全固定的编辑器,您非常了解其行尾处理。
问题是 Windows 上的换行约定与 Linux 不同,因此在 Ubuntu 端,每个文件看起来都已被完全修改(在每行末尾添加了一个 CR)。这通常是因为 repo 以某种级别签出autocrlf
: 在 repo 中,文件具有 LF 约定,但在 Windows 上签出时,文件具有 CRLF 行结尾。
如果您想安全地与 Windows 和 Linux 共享您的工作副本,您应该关闭core.autocrlf
.
我猜是行尾有问题。您可能已经提交了带有 windows 行尾的代码,并且当您在 ubuntu 中签出代码时,git 将这些代码转换为 unix 样式的行尾。
看看这个页面处理行尾