如何在GIT存储库中修复CRLF以避免合并冲突

And*_*dik 12 git core.autocrlf

我创建了我的回购,autocrlf=true然后做了一些检查和提交autocrlf=false.然后切换回autocrlf=true(OS Win).一切似乎都没问题,直到我开始分支之间的一些合并.出现了许多合并冲突,其中整个文件由于更改而被标记为已更改eols(我认为这些文件是已检出并提交的autocrlf=false).

有一些历史,对我来说是值得的,所以我更喜欢做一些转换或修改提交转换eols而不是创建新的回购并开始新的生活.

这就是我的理解autocrlf(OS Win):

如果是的话 autocrlf=true

WorkingTree ->  commit  -> GITRepository
CRLF         CRLF to LF      LF
LF           no conv.        LF
WorkingTree <- checkout <- GITRepository
CRLF         LF to CRLF      LF
Run Code Online (Sandbox Code Playgroud)

如果是的话 autocrlf=false

WorkingTree ->  commit  -> GITRepository
CRLF         no conv.      CRLF
LF           no conv.      LF
WorkingTree <- checkout <- GITRepository
CRLF         no conv.      CRLF
LF           no conv.      LF
Run Code Online (Sandbox Code Playgroud)

现在我想使用GIT autocrlf=false,所以我决定检查每个分支,eols使用实用程序EOL转换器修复源文件并使用CRLF提交.我做到了,但是时间后,仍有一些文件,这可能是没有签出后,我改变了设置autocrlffalse(或这些文件来从旧的不固定的提交合并?在转换过程中我用面膜*.filetype自动化处理所有LF到CRLF所以对我这样的情况没有其他解释).我也尝试过touch这些文件,重新提交它们(正如我在stackoverflow中看到的那样)但是日期更改与GIT AFAIK无关.我还阅读了如何撤消autocrlf的损坏,但不确定它是我的情况,也不理解向导的技巧.

我怎么能摆脱这个烂摊子呢?

e40*_*e40 2

使用 git merge 选项“ignore-space-change”或“ignore-all-space”作为“递归”策略。至少 1.7.4.1 中有此选项。