让Git“LF将被CRLF取代”的警告消失了

时间:2009-10-21 01:18:40

标签: git

我已经设置了Git,因此它不会提交不一致的行结尾。问题是即使它们不是,一大堆文件也会被修改。我键入什么来使这些文件在本地端固定行结尾?

# git checkout dev
M   src/au/policy/dao/EmailQueue.java
M   src/au/policy/dao/EmailQueueFactory.java
M   src/au/policy/dao/PolicyPublisher.java
Already on 'dev'

# git diff
warning: LF will be replaced by CRLF in src/au/policy/dao/EmailQueue.java
warning: LF will be replaced by CRLF in src/au/policy/dao/EmailQueueFactory.java
warning: LF will be replaced by CRLF in src/au/policy/dao/PolicyPublisher.java

这是我添加到我的git配置文件中的内容,它似乎做了我打算在这个问题上做的事情:

autocrlf = true

7 个答案:

答案 0 :(得分:61)

如果您更改core.autocrlf配置变量(如果我正确理解您的问题),则可能会发生这种情况。

如果您处于干净状态,即刚刚提交,并且您没有未经注释的更改,则强制重新检出并删除索引应该可以解决问题:

  

以下命令git reset --hard HEAD将使您当前的分支指向最新的提交,并且所有未提交的代码都将丢失。确保提交代码或进行备份

$ rm .git/index
$ git reset --hard HEAD

我认为,这将同步工作区文件和索引(暂存区)以跟踪crlf设置。

答案 1 :(得分:32)

创建新的Xcode项目时遇到了这个问题。 我解决这个问题的方法:

在终端写入

$: git config --global --edit

然后在git配置文件中将 safecrlf 更改为 false 。我的设置:

[core]
    autocrlf = input
    safecrlf = false

我知道git有cmd行工具,但它们对我不起作用。 然后Xcode创建git repos没有任何问题。

答案 2 :(得分:25)

我唯一能想到的就是检查core.safecrlf是否设置为warn

git config --get core.safecrlf

认为可能的值为truefalsewarn。我相信设置为false会解决警告,但这可能不是一个好主意。

答案 3 :(得分:17)

您可以删除并重新签出索引中的违规文件,如下所示:

rm <files>
git checkout -- <files>

或者,如果它们是唯一的修改过的文件(请注意这个命令),你可以像这样编写脚本:

git diff --name-only --diff-filter=M | xargs rm --
git checkout -- .

在GNU系统上,您可以使用更安全的管道,但在任何情况下,您的文件名似乎都没有空格或其他分隔符。

git diff -z --name-only --diff-filter=M | xargs -0 rm --

答案 4 :(得分:2)

试试这个,它对我有用:

cd src/au/policy/dao
dos2unix

如果该文件夹中还有其他文件,那么您需要将其分解为以下内容(否则会尝试在任何子目录中的每个文件上执行此操作,这可能需要一段时间):

cd src/au/policy/dao
dos2unix EmailQueue.java
dos2unix EmailQueueFactory.java
dos2unix PolicyPublisher.java

它在我的机器上运行得很快并修复了所有的行结尾,它比其他一些修复程序更简单,更容易。

答案 5 :(得分:0)

请注意,上述所有修补程序都可能对您有用,例如,您可能已经通过简单的文件传输收到了代码。 您可以通过按ENTER接受每个警告,但是在可能需要一段时间才能使用的大型存储库上。 忽略对已签出并已编辑的代码进行转换的另一种方法是创建补丁文件:

git diff > changes.patch

答案 6 :(得分:0)

就我而言,在将 autocrlf 变量设置为 true 后,然后运行

git stash

然后

git stash pop

一切都被清除了