7

我决定通过一个文件以正确的方式设置行尾.gitattributes,例如此处详述- 所以我将 core.autocrlf 设置为 false 并创建并提交了一个 .gitattributes 文件:

*.java text eol=native
*.jsp text eol=native
*.css text eol=native
*.html text eol=native
*.js text eol=native
*.xml text eol=native
*.sql text eol=native
*.MF text eol=native

# git files
*.gitignore text eol=native
*.gitattributes text eol=native

#eclipse files
*.classpath text eol=native
*.project text eol=native
*.prefs text eol=native
*.properties text eol=native

然后我按照这里的建议发出git rm --cached -r .然后git reset --hard(也尝试过) 。现在所有文件都有 LF 行结尾。不应该是 CRLF 吗?我想念什么?我在 Windows 7 上,.git checkout HEADgit version 1.8.0.msysgit.0

谢谢

4

2 回答 2

7

它一定是一个错误。奇怪的是它并没有真正修复或报告 - 这整个混乱都是关于 Windows 的,它不能在 Windows 上精确工作?此外,任何地方都没有提到它(?)

编辑:从 mingw“最新存储库目录”安装 - g++、gcc、ObjC + MinGW Developer Toolkit 和 MSYS-1.0.11。相同的行为。每当我尝试提交 CRLF 文件时,我都会得到CRLF 将被替换为 LF(在结帐时暗示)警告。

编辑2:似乎即将修复

编辑 3:这已在 Git 1.8.4 中修复。

于 2012-11-25T15:48:43.523 回答
4

对于您要执行的操作,我认为您需要以下内容。请注意,根据 gitattributes 手册页的 eol 属性可能是“lf”或“crlf”。Native 用于 core.eol 配置设置。

将 core.autocrlf 设置为 false 以显式控制规范化。现在只有用 text 属性标记的文件才会进行规范化。

对于特定文件类型,将 eol 属性显式设置为 lf 或 crlf(例如:shell 脚本可能需要 lf 才能在 unix 上工作,.csproj 文件可能需要 crlf 在 Windows 上)。如果未设置 eol 属性,则应使用 core.eol 的值。如果您将 core.eol 设置为 crlf,那么您的文本文件将以 crlf 结尾。

这是一个 git 测试脚本来说明这一点(从 gi​​t/t/ 运行):

#!/bin/sh
test_description='check native crlf setting'
. ./test-lib.sh

has_cr() {
        tr '\015' Q <"$1" | grep Q >/dev/null
}

test_expect_success 'test native elf' '
  printf "*.txt text\n" > .gitattributes
  printf "one\r\ntwo\r\nthree\r\n" > filedos.txt
  printf "one\ntwo\nthree\n" > fileunix.txt
  git init &&
  git config core.autocrlf false &&
  git config core.eol crlf &&
  git add . &&
  git commit -m "first" &&
  rm file*.txt &&
  git reset --hard HEAD &&
  has_cr filedos.txt && has_cr fileunix.txt
'

test_done

使用上述配置和属性,对于 Windows 1.8.0 的 Git,这两个文件在重置后都被规范化并包含 crlf 行结尾。

可能存在错误的地方是,如果 core.eol 变量未设置(或设置为“本机”),则此测试失败,因为在这种情况下文件被规范化为 lf 行结尾。您上面提到的路径也无助于这种情况。因此,根据我的测试,您必须将 core.eol 显式设置为 crlf 才能使您计划的方法成功。

于 2012-11-25T23:18:59.370 回答