我从一个合作者那里通过手动传输收到了文件,也就是说,不是通过git方式,也不是通过合并请求,我想把这些文件放到我的工作树中。
- EOL的角色不尊重我的政策,那就是:
- CRLF用于工作目录中的大多数文件格式;
- 本地和远程存储库中的LF。
1.有数以千计的此类文件,其中绝大多数仅具有这些EOL差异,且少于一百个具有有意义的差异。
下面是我的尝试:
- 我尝试过不同的git设置:
git config --get core.autocrlf=true
将CRLF放在工作目录中,将LF放在本地和远程存储库中,如Git replacing LF with CRLF中所述,之后我完成了重正化以及git rm --cached -r .
和git reset --hard
;- 使用additional C# settings和
eol=crlf
将. gitattributes设置为this template one,以确保这些设置不会丢失,如使用Git处理CRLF(回车,换行)的策略是什么?中所述--但基本上这并没有增加任何内容; whitespace = cr-at-eol
,这样git diff
就可以忽略eol字符的差异,正如对Make 'git diff' ignore ^M的回答中所解释的那样。- 但是我的git GUI客户端SourceTree忽略了这些设置,仍然会列出成千上万的文件更改,它可以不显示差异,但仍然会列出Force SourceTree ignore line endings in git files中所示的文件,所以我尝试了其他几个设置,但我没有发现任何设置会跳过只包含eol字符更改的文件:SourceTree,SmartGit,Gittyup,GitHub Desktop,GitAhead,TortoiseGit,GitGUI,Git Extensions. GitAhead在这个例子中是最好的,因为它会将文件差异列表中只有eol字符差异的文件折叠起来.但是它仍然会列出这些差异,而且总体上非常慢.
以下是我看到的策略:
1.手动审查所有的文件-我宁愿不;
1.查找一个git GUI客户端,跳过只有eol字符差异的文件;
1.在适当的文件格式上使用记事本++等工具将所有LF替换为CRLF;
1.创建一个分支,在其中添加数千个文件,然后将其合并到我的开发分支中,在此过程中强制本地和远程存储库中的所有eol字符为LF。
有更好的主意吗?
当然,下次我必须这么做的时候,我会鼓励我的合作者使用git向我发送文件!
1条答案
按热度按时间ljsrvy3e1#
您可以移动文件夹中的文件,并使用这段代码将crlf转换为lf。
这将递归读取所有文件,将crlf更改为lf并保存。
确保文件适合内存