我在工作中使用git-svn,人们经常抱怨我提交的是LF而不是CRLF(我们主要是Windows商店)。据我所知,当core.autocrlf是true时,工作副本是CRLF,当false是LF,当input保持不变。我喜欢autocrlf = true作为一个概念,但我希望它在索引中默认为CRLF,因为这是get提交给SVN的内容。
git-svn
LF
CRLF
core.autocrlf
true
false
input
autocrlf = true
有没有办法设置索引的行尾?
我见过core.eol,但这似乎也只设置了工作副本使用的内容,而不是索引。
core.eol
llycmphe1#
你需要在项目的根目录下添加一个名为.gitattributes的文件。这将强制每个人提交相同的行结尾。在你的例子中,当你想要强制crlf时,你需要在.gitattributes中添加这行:
.gitattributes
crlf
* text eol=crlf
然后,您还可以将repo中的每个文件正常化一次,并且不再为此烦恼:尝试使用git filter-branch修复行结尾,但没有成功你也可以参考github guide中关于行结尾的部分:https://help.github.com/articles/dealing-with-line-endings
8qgya5xd2#
原来git-svn使用SVN中的svn:eol-style属性来决定如何存储行尾。如果你进入一个纯SVN checkout 并添加svn:eol-style设置为native,Git将在Windows中使用CRLF,在Linux/OSX中使用LF。我也有这些设置:
svn:eol-style
native
$ git config core.autocrlf false $ git config core.safecrlf true
我的.gitattributes文件中没有任何内容。
44u64gxh3#
我知道这个问题很老了,但以防万一有人还在寻找答案。。首先,你必须确保core.autocrlf在你的全局和本地配置中都是false。然后要强制git转换为CRLF,你可以使用这样定义的过滤器:在本地config文件(.git\config)中:
config
[filter "crlf"] clean = unix2dos
您可以通过在attribute文件(.git\info\attributes)中为某些文件添加过滤器来使用它:
attribute
*.txt filter=crlf
这个过滤器使用unix2dos命令,如果你在Linux上,这个命令可能已经可用了。否则,你可以使用install it或使用一个替代命令,如sed -i -e 's/\r//g'(这个命令工作得很好,假设你的文件中没有任何Mac行结尾)。像这样对所有文件运行过滤器怎么样?
sed -i -e 's/\r//g'
* filter=crlf
这可以工作,但我没有在大型repo中使用过它,所以我不能保证它不会影响性能,或者是否有损坏二进制文件的风险。幸运的是,unix2dos有一些检查来检测二进制文件,如果它们被检测为二进制文件,则不会对其进行任何更改。我尝试在PNG上运行它,得到:
unix2dos
unix2dos: Binary symbol 0x1A found at line 2 unix2dos: Skipping binary file fff.png
但是,如果某些文件未被正确检测到,您可能需要保持警惕。
3条答案
按热度按时间llycmphe1#
你需要在项目的根目录下添加一个名为
.gitattributes
的文件。这将强制每个人提交相同的行结尾。在你的例子中,当你想要强制crlf
时,你需要在.gitattributes
中添加这行:然后,您还可以将repo中的每个文件正常化一次,并且不再为此烦恼:尝试使用git filter-branch修复行结尾,但没有成功
你也可以参考github guide中关于行结尾的部分:https://help.github.com/articles/dealing-with-line-endings
8qgya5xd2#
原来
git-svn
使用SVN中的svn:eol-style
属性来决定如何存储行尾。如果你进入一个纯SVN checkout 并添加svn:eol-style
设置为native
,Git将在Windows中使用CRLF,在Linux/OSX中使用LF。我也有这些设置:
我的
.gitattributes
文件中没有任何内容。44u64gxh3#
我知道这个问题很老了,但以防万一有人还在寻找答案。。
首先,你必须确保
core.autocrlf
在你的全局和本地配置中都是false
。然后要强制git转换为CRLF,你可以使用这样定义的过滤器:在本地
config
文件(.git\config)中:您可以通过在
attribute
文件(.git\info\attributes)中为某些文件添加过滤器来使用它:这个过滤器使用unix2dos命令,如果你在Linux上,这个命令可能已经可用了。否则,你可以使用install it或使用一个替代命令,如
sed -i -e 's/\r//g'
(这个命令工作得很好,假设你的文件中没有任何Mac行结尾)。像这样对所有文件运行过滤器怎么样?
这可以工作,但我没有在大型repo中使用过它,所以我不能保证它不会影响性能,或者是否有损坏二进制文件的风险。
幸运的是,
unix2dos
有一些检查来检测二进制文件,如果它们被检测为二进制文件,则不会对其进行任何更改。我尝试在PNG上运行它,得到:但是,如果某些文件未被正确检测到,您可能需要保持警惕。