强制所有行结尾都为 LF for git

Ada*_*dam 6 git newline core.autocrlf

我为 Windows 和 linux 开发。我的 Linux 开发环境是在我的 Windows 主机上运行的虚拟机。我共享了一些目录(实际上是在起诉 samba,而不是内置的虚拟机共享文件夹,所以该目录实际上是在 linux 来宾上并共享给主机)

我们正在从 svn 迁移到 git。我想在我的 Windows 机器上运行 Source Tree(Linux 是无头的)来进行版本控制。但我希望所有文件都有 linux 行尾(LF)。

我尝试按照git repo 和工作副本中的Force LF eol 中的说明进行操作,但它们对我不起作用。

我已将配置设置如下:

[adamc@adamc-centos scripts]$ git config core.autocrlf
input
[adamc@adamc-centos scripts]$ git config  core.eol
lf
Run Code Online (Sandbox Code Playgroud)

我的 .gitattributes 中有以下内容(甚至强制 .sh 成为文本文件并再次指定 eol)

* text=auto
*.sh    text eol=lf
Run Code Online (Sandbox Code Playgroud)

我已经运行了那里指定的 checkout-index 命令,但我仍然有带有 Windows 行结尾的 .sh 文件!

[adamc@adamc-centos scripts]$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working directory clean

[adamc@adamc-centos scripts]$ git checkout-index --force --all
[adamc@adamc-centos scripts]$ ./EWEB/get_unmerged.sh
-bash: ./EWEB/get_unmerged.sh: /bin/bash^M: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我错过了什么?还是我接近它错了?

小智 -2

如果您使用不同的操作系统,建议的设置是

  • 用于窗户 $ git config --global core.autocrlf true

  • 对于 Linux/Mac git config --global core.autocrlf input

我认为您不需要定义参数core.eol或使用 file .gitattributes。默认情况下,Git 可以正确检测文本文件。

如何提交修复存储库中的所有行结尾,您可以在 github 页面找到https://help.github.com/articles/dealing-with-line-endings

如果您使用 git-svn 迁移存储库,那么重写整个历史记录并修复所有提交中的行结尾可能是个好主意。

  • 我*想*在 Windows 上查看,但使用 linux 行结尾。据我了解,默认/推荐的设置是为了实现相反的效果:您始终拥有您签出的地方的本机行结尾。 (5认同)