使Git“LF将被CRLF替换”警告消失

nc1teljy  于 2023-02-07  发布在  Git
关注(0)|答案(7)|浏览(157)

我设置了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
nle07wnf

nle07wnf1#

如果您更改core.autocrlf配置变量(如果我正确理解了您的问题),则可能会发生这种情况。
如果您处于clean状态,即刚刚提交之后,并且没有未提交的更改,强制重新 checkout 和删除索引应该可以达到目的:
下面的命令git reset --hard HEAD将使当前分支指向最近的提交,所有未提交的代码将丢失。请确保提交代码或进行备份

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

我认为,这将同步工作区文件和索引(临时区域)以遵循crlf设置。

kx5bkwkv

kx5bkwkv2#

我在创建新的Xcode项目时遇到了这个问题。我对这个问题的解决方案:
在终端写入中

git config --global --edit

然后在git配置文件中将 safecrlf 更改为 false

[core]
    autocrlf = input
    safecrlf = false

我知道git有命令行工具,但我用不了。然后Xcode创建git repos没有任何问题。

rqqzpn5f

rqqzpn5f3#

我唯一能想到的是检查core.safecrlf是否设置为warn
git config --get core.safecrlf
我 * 认为 * 可能的值是truefalsewarn。我相信设置为false将解决警告问题,尽管这可能不是一个好主意。

lnvxswe2

lnvxswe24#

你可以像这样从索引中删除并重新 checkout 有问题的文件:

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 --
bqjvbblv

bqjvbblv5#

试试这个,对我很有效:

cd src/au/policy/dao
dos2unix

如果该文件夹中还有其他文件,那么您需要将其拆分为以下几个部分(否则,它会尝试对任何子目录中的每个文件进行拆分,这可能需要一段时间):

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

它在我的机器上运行得非常快,修复了所有的行尾,它比其他一些修复更简单。

8wigbo56

8wigbo566#

请注意,上述所有修复可能对您有效,例如,您可能通过简单的文件传输收到代码。您可以按Enter键接受每个警告,但在大型repos上可能需要很长时间。另一种忽略已 checkout 和编辑代码转换的方法是创建一个修补文件:

git diff > changes.patch
628mspwn

628mspwn7#

在我的示例中,将autocrlf变量设置为true后,运行

git stash

然后

git stash pop

所有东西都清理干净了

相关问题