相关疑难解决方法(0)

更改core.autocrlf后如何强制转换工作树文件?

我在 Windows 上并且在系统范围内拥有core.autocrlf=true.

对于特定的存储库,我已在本地将其覆盖为false.

但这并没有转换签出文件中的行尾。我怎么做?

  • 如果我使用 eg 手动转换文件dos2unix,它们会显示为已更改。
  • 也试过git checkout --force HEAD,没有效果。

我发现的唯一有效方法是删除所有文件,然后git reset --hard这很尴尬(=没有简单可靠的命令可以做到这一点,而且它做了很多不必要的工作——一切都是从头开始重新创建的,而不仅仅是覆盖需要转换的文件)。

git line-endings

5
推荐指数
2
解决办法
1427
查看次数

当 autocrlf 为 false 且文本未指定时,Git 仍显示“LF 将被 CRLF 替换”警告

我有一个只能在 Windows 上使用的存储库。而且我希望源代码管理不会以任何方式修改我的文件的内容。

core.autocrlf在全局设置中设置为 false 并验证不存在本地回购覆盖。我发现我的 repo 中有一个现有的 .gitattributes 文件,* text=auto它是唯一的条目。所以我删除了 .gitattributes 文件。通过阅读文档,我的理解是这应该导致text未指定,并将遵循为core.autocrlf.

但是,当我暂存我的文件时,我仍然收到以下错误:

LF will be replaced by CRLF in MyProject/src/static/images/logo.svg.
The file will have its original line endings in your working directory.
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,有些东西仍然会修改我的文件。它是什么,我该如何阻止它?

windows git

5
推荐指数
1
解决办法
606
查看次数

更改为 .gitattributes 后的 Git 重新检出文件

我有一个 repo,其中包含一个错误地以 LF 行结尾提交的文件,但它需要有 CRLF 行结尾。为了解决这个问题,我添加了一个 .gitattributes 文件以在结帐时强制执行正确的行结尾,这似乎解决了检出新存储库时的问题,但现有的检出拒绝更新文件,除非我删除文件然后重新检出. 我在另一个问题中看到

git rm --cached -r .
git reset
git checkout .
Run Code Online (Sandbox Code Playgroud)

将正确地将受影响文件的行尾从 CRLF 重置为 LF,但这似乎不适用于 LF 到 CRLF。如何让 Git 自动应用 .gitattributes 中的更改?

git

4
推荐指数
2
解决办法
744
查看次数

如何将`.gitattribute`文件应用到目录下的所有文件?

在本地建立的任意Git项目中,.gitattribute根目录下可以包含一个文件来根据环境控制特殊字符(以GitHub上的Apache Spark为例):

*.bat text eol=crlf
*.cmd text eol=crlf
*.java text eol=lf
*.scala text eol=lf
*.xml text eol=lf
*.py text eol=lf
*.R text eol=lf
Run Code Online (Sandbox Code Playgroud)

Git 仅在提交新文件时使用此文件,这可能会导致许多碎片提交,这些提交不会更改除特殊字符(特别是行分隔符)之外的文件内容。

我可以使用哪一个 Git 命令一次性修改项目下的所有文件,无论是否提交?

git newline gitattributes core.autocrlf

4
推荐指数
1
解决办法
278
查看次数

git diff 没有差异,但由于行结尾的改变,不应该有一些差异吗?

我的问题可能来自于对 Git 某些方面的误解。当我因 Windows 机器上的更改而在 Mac 上将 CRLF 更改为 LF 行结尾时,我想到了这个问题。

1) 我首先在 OSX 上初始化一个新存储库,并将所有文件放入受 CRLF 行结尾影响的文件中。

2)第一次提交,由于设置了 core.autocrlf = input ,git 自动将行结尾更改为 LF

我的本地工作树中的文件仍然具有 CRLF 行结尾,但这里也提供了解决方案(How to Normalizeworking tree lineendings in Git?):

删除Index中的文件,并根据上次commit恢复索引+工作树:

git rm --cached -r .
git reset --hard
Run Code Online (Sandbox Code Playgroud)

现在出现了混乱:我的第一个提交 1) 包含转换后的 LF 行结尾,而我的本地树和索引则不包含。因此,我的期望是 git 应该显示工作树/索引和存储库之间的差异。但

git diff HEAD
git diff --chached
Run Code Online (Sandbox Code Playgroud)

没有列出任何更改?

git

3
推荐指数
1
解决办法
1239
查看次数