【问题标题】:Inconsistent line endings using git-svn with commits from both VCS使用 git-svn 与来自两个 VCS 的提交不一致的行尾
【发布时间】:2011-04-05 08:50:59
【问题描述】:

我有一个远程 SVN 存储库和一个本地 git 存储库。使用 git-svn 我已将 git 链接到 SVN,并成功使用 git svn rebasegit svn dcommit 拉取并推送到远程 SVN 存储库。

但是,当其他人使用 SVN 查看我以前用 git 编辑过的文件并尝试在 VS2010 中打开它们时,他们会收到一个对话框,告诉他们行尾不一致。

我已经阅读了一些关于 git config 中的 core.safecrlf 选项的内容,但这能解决我的问题吗?我有很多其他人在签到,但我们都在运行窗口 - 我认为行尾是一样的?

设置core.safecrlf 会在结帐和提交时保留相同类型的行尾吗?

【问题讨论】:

  • 停止打破我的行尾可能!

标签: visual-studio-2010 svn git git-svn line-endings


【解决方案1】:

我最近一直在处理同样的问题。默认情况下,Windows 上的 Git 设置 core.autocrlf = true。发生的情况是,您的文件是从带有 CRLF 行结尾的 SVN 存储库中签出的,但使用 unix 样式 (LF) 行结尾提交。当您 dcommit 这些更改时,我相信这些文件也会以 unix 样式的行结尾被推送到 SVN 服务器。现在,当有人使用 SVN 签出这些文件时,不会执行任何行结束转换。

您可以设置 core.autocrlf = false 以便不进行任何转换。如果您都在 Windows 中工作,那么您应该没有任何问题。如果您与 *nix 用户共享 SVN 存储库,那么您很可能会开始出现不一致。这就是 autocrlf 选项的原因。 repos 应该保持一致,并且由于 Linux 不喜欢很好地使用 CRLF,所以这个 autocrlf 应该设置为 true。

【讨论】:

  • 请注意,一旦更改设置,您应该验证所有行尾是否符合您的预期。为此,您应该更改 core.autocrlf 属性,然后拉取 Git 存储库。现在检查文件的行尾。最后,将任何更改作为单个提交提交。从那时起,您只需验证是否为您设置的任何新环境(新机器、重新安装等)更改了此值。
【解决方案2】:

行尾问题是 git-svn 众所周知的头疼问题。我建议使用SmartGit 来处理您的存储库。我尊重 svn:eol 样式的值,以便在 Git 中使用正确的 EOL(将其转换为相应的 .gitattirbutes 值)。您还可以通过适当的更改 .gitattirbutes 来控制推送到 SVN 时的 svn:eol 样式值。

如果您可以访问服务器,则可以使用另一种方法:只需将SubGit 安装到您的 SVN 服务器中。然后将在服务器上创建一个链接的 Git 存储库,以便每次推送到它都会自动转换为 SVN,反之亦然。它还将 svn:eol-style 转换为 .gitattirbutes。

所以我会推荐其中一种解决方案,但不推荐 git-svn,它(据我所知)在 Windows 上非常缓慢。

【讨论】:

    【解决方案3】:

    这是一篇 GitHub 文章,描述了您在 Git 中处理行尾字符的选择:

    https://help.github.com/articles/dealing-with-line-endings

    本质上,Git 有助于在不同操作系统上转换 EOL。 SVN 也有类似的功能。您需要确保以一致的方式设置它们。

    【讨论】:

      猜你喜欢
      • 2019-09-12
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多