我已经设置了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
您可以从索引中删除并重新检出有问题的文件,如下所示:
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 --
如果您更改core.autocrlf
配置变量(如果我正确理解您的问题),则可能会发生这种情况。
如果你处于干净状态,即刚刚提交,并且你没有未经修改的更改,强制重新签出和删除索引应该可以解决问题:
下面的命令
git reset --hard HEAD
将使您当前的分支指向最新的提交,并且所有未提交的代码都将丢失。确保提交代码或进行备份
$ rm .git/index
$ git reset --hard HEAD
我认为,这将同步工作区文件和索引(临时区域)以遵循crlf设置。
我在创建新的Xcode项目时遇到了这个问题。我解决这个问题的方法:
在终端写
$: git config --global --edit
然后在git配置文件中将safecrlf更改为false。我的设置:
[core]
autocrlf = input
safecrlf = false
我知道git有cmd线工具,但它们对我不起作用。然后Xcode创建git repos没有任何问题。
我唯一能想到的是检查core.safecrlf
是否设置为warn
。
git config --get core.safecrlf
我认为可能的值是true
,false
和warn
。我相信设置为false
将解决警告,虽然这可能不是一个好主意。
试试这个,它对我有用:
cd src/au/policy/dao
dos2unix
如果该文件夹中还有其他文件,那么您需要将其分解为以下内容(否则它会尝试在任何子目录中的每个文件上执行此操作,这可能需要一段时间):
cd src/au/policy/dao
dos2unix EmailQueue.java
dos2unix EmailQueueFactory.java
dos2unix PolicyPublisher.java
它在我的机器上运行得非常快,并修复了所有的行结尾,它比其他一些修复程序更简单,更容易。
请注意,请注意上述所有修复程序可能对您有用,例如您可能通过简单的文件传输接收了代码。您可以按ENTER键接受每个警告,但是可能需要很长时间的大型回购。忽略已经签出和编辑的代码转换的另一种方法是创建补丁文件:
git diff > changes.patch