我想强制git在Windows下检出文件LF
而不是CR+LF
.我检查了两个配置选项,但我无法找到正确的设置组合.
我希望它将所有文件转换为LF
并保留LF
文件.
备注:我使用autocrlf = input
但是这只是在你提交时修复文件.我想强制它让他们使用LF
.
可能我不是那么清楚:存储库已经在使用LF
但是使用msysgit检出的文件正在使用CR+LF
,我想强制msysgit使用它们LF
:强制Unix行结束.
>git config --list | grep crlf
core.autocrlf=input
Run Code Online (Sandbox Code Playgroud)
Chr*_*ial 417
在Windows中获取LF结尾的正确方法是首先设置core.autocrlf
为false
:
git config --global core.autocrlf false
Run Code Online (Sandbox Code Playgroud)
如果使用msysgit,则需要执行此操作,因为它将其设置为true
系统设置.
现在git不会做任何行结束规范化.如果您希望签入的文件进行规范化,请执行以下操作:text=auto
在.gitattributes
所有文件中设置:
* text=auto
Run Code Online (Sandbox Code Playgroud)
并设置core.eol
为lf
:
git config --global core.eol lf
Run Code Online (Sandbox Code Playgroud)
现在你也可以通过运行将单个repos切换到crlf(在工作目录中!)
git config core.eol crlf
Run Code Online (Sandbox Code Playgroud)
完成配置后,您可能希望git规范化repo中的所有文件.为此,请转到repo的根目录并运行以下命令:
git rm --cached -rf .
git diff --cached --name-only -z | xargs -n 50 -0 git add -f
Run Code Online (Sandbox Code Playgroud)
如果您现在希望git也规范化工作目录中的文件,请运行以下命令:
git ls-files -z | xargs -0 rm
git checkout .
Run Code Online (Sandbox Code Playgroud)
Ben*_*age 207
我经常回到这个答案,虽然这些都不适合我.那就是说,对我来说正确的答案是其他人的混合.
我发现的作品如下:
git config --global core.eol lf
git config --global core.autocrlf input
Run Code Online (Sandbox Code Playgroud)
对于在设置全局设置后检出的repos,所有内容都将以repo中的任何内容进行检出 - 希望LF
(\n
).任何CRLF
将被转换为只LF
在登记.
使用已经签出的现有仓库 - 在仓库中有正确的行结尾而不是工作副本 - 您可以运行以下命令来修复它:
git rm -rf --cached .
git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)
这将删除(rm
)recursively(r
)而不使用prompt(-f
),除了那些已经编辑过的文件(--cached
),从当前目录(.
).在reset
随后返回所有这些文件到他们自己的真实行结束(匹配什么在回购)的状态.
如果你需要在repo中修复文件的行结尾,我建议你抓住一个编辑器,让你像IntelliJ或Sublime Text一样批量完成,但我相信任何一个好的人都可能支持这个.
Von*_*onC 88
OP在他的问题中补充道:
使用msysgit检出的文件正在使用
CR+LF
,我想伪造msysgit来获取它们LF
第一个简单步骤仍然在.gitattributes
文件中:
*.txt -crlf
Run Code Online (Sandbox Code Playgroud)
,以避免任何crlf转换为具有正确的eol文件.
但第二个更强大的步骤涉及gitattribute过滤器驱动程序并添加涂抹步骤
每当你更新你的工作树,脚本可以,只为你在指定的文件git config --global core.autocrlf false
,迫使.gitattributes
你要执行的任何其他格式化选项.
如果" LF eol
"脚本没有做任何事情,您将(在提交后)转换文件,完全应用您需要遵循的格式.
kop*_*por 44
如果你
你可以从git 2.10开始.2.10或更高版本是必需的,因为2.10修复了text = auto和eol = lf的行为.来源.
将.gitattributes
文件放在git存储库的根目录中,其中包含以下内容:
* text=auto eol=lf
Run Code Online (Sandbox Code Playgroud)
承诺吧.
您还可以.editorconfig
在存储库的根目录中添加一个,以确保现代工具创建具有所需行结尾的新文件.
# EditorConfig is awesome: http://EditorConfig.org
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true
Run Code Online (Sandbox Code Playgroud)
kus*_*sma 26
core.autocrlf=input
是您想要的正确设置,但您可能必须执行git update-index --refresh
和/或git reset --hard
更改才能生效.
随着core.autocrlf
设置为input
,git会不适用于退房换行转换(所以如果你在回购有LF,你会得到LF),但将确保万一你搞砸了,并在工作介绍一些CRLFs以某种方式复制,他们不会进入回购.
归档时间: |
|
查看次数: |
190337 次 |
最近记录: |