git - 所有文件在 Ubuntu 中取消暂存,但在 Windows 中不

标签 git

当使用 Ubuntu 时,我所有的文件都在 Git 中取消暂存。

当我运行 git diff 时,Git 显示:

--- a/<filename>
+++ b/<filename>
-<output of file>
+<output of file>

例如,

--- a/.gitignore
+++ b/.gitignore
-.tmp
-build
-node_modules
+.tmp
+build
+node_modules

但是,当我在 Windows 中使用 Git 时,Git 会正确显示状态(所有文件已提交和暂存)

关于如何解决这个问题有什么想法吗?

我在 Ubuntu 和 Windows 中使用与 Git 存储库相同的分区,因为它是 FAT32,Ubuntu 会自动挂载该分区。

最佳答案

这听起来像是 CRLF 问题。 Windows 使用 CRLF 来表示行尾,而 Linux 仅使用 LF。 Git 本身只使用 LF。当您从 Windows 切换到 Linux 时,git 认为文件已更改,因为它认为不必将每行结尾的 CRLF 转换为 LF,因此文件会获得额外的 CR 字符。

查看此 blog post on the subject进行广泛的讨论。

这全部由 core.eol 配置选项控制。通常,这被设置为 native,它告诉 git 使用您的操作系统 EOL 约定。你最好的选择是创建一个 .gitattributes 文件作为帖子指定的,告诉 get 使用 LF 而不管操作系统。

关于git - 所有文件在 Ubuntu 中取消暂存,但在 Windows 中不,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18488329/

相关文章:

git - 搞乱了我本地的 git 分支。我如何恢复到干净工作的主分支

git - 为 Git 分支名称创建别名

php - 自动 git pull 到服务器 : Host key verification failed

git - 当两个版本具有相同的更改时,使 git merge 导致冲突

git - 是否可以与子模块同步 check out 主存储库的分支?

Git 子树 : Use only subrepository instead of whole repository

由于新的子模块,git checkout 失败

svn - git svn rebase : Incomplete data: Delta source ended unexpectedly

java - 我如何使用 JGit 进行 pull 或获取?

git - 如何转储 MySQL 数据库的结构并将其导入以使用现有数据更改表?