我有一个远程SVN存储库和一个本地git存储库。使用git-svn我已将git链接到SVN并成功使用git svn rebase
,git svn dcommit
来拉动并推送到远程SVN存储库。
然而,当其他人用SVN
签出我之前使用git编辑的文件并尝试在VS2010中打开它们时,会收到一个对话框,告诉他们行结尾不一致。
我在git config中已经阅读了一些关于 core.safecrlf
选项的内容,但这会解决我的问题吗?我有很多其他人在办理登机手续,但我们都在运行窗户 - 我认为线路结尾会是一样的吗?
设置core.safecrlf
会在结帐时和提交时保留相同类型的行吗?
答案 0 :(得分:4)
我最近一直在处理同样的问题。默认情况下,Windows上的Git设置 core.autocrlf = true 。会发生什么情况是您的文件是从带有CRLF行结尾的SVN回购中检出的,但是使用unix样式(LF)行结尾提交。当您 dcommit 这些更改时,我相信这些文件也会被推送到具有unix样式行结尾的SVN服务器。现在,当有人使用SVN检出这些文件时,不会执行行结束转换。
您可以设置 core.autocrlf = false ,以便不进行转换。如果您都在Windows中工作,那么您应该没有任何问题。如果您与* nix用户共享SVN repo,那么您可能会开始出现不一致的情况。这就是autocrlf选项的原因。 repos应保持一致,并且由于Linux不喜欢与CRLF很好地配合,因此应将此autocrlf设置为true。
答案 1 :(得分:1)
行结尾问题是众所周知的git-svn头痛问题。我建议使用SmartGit来处理您的存储库。我尊重svn:eol-style值以在Git中使用正确的EOL(将其转换为相应的.gitattirbutes值)。您还可以通过适当的更改来推送到SVN时控制svn:eol-style值.gitattirbutes。
如果您可以访问服务器,则可以采用另一种方法:只需将SubGit安装到SVN服务器中即可。然后将在服务器上创建链接的Git存储库,以便每次推送都将自动转换为SVN,反之亦然。它还将svn:eol-style翻译为.gitattirbutes。
所以我会推荐其中一个解决方案,但不是git-svn(据我所知)在Windows上非常慢。
答案 2 :(得分:1)
这是一篇GitHub文章,描述了您在Git中处理行尾字符的选择:
https://help.github.com/articles/dealing-with-line-endings
基本上Git有助于在不同的操作系统上转换EOL。 SVN具有类似的功能。您需要确保以一致的方式设置它们。