git - 我如何避免像这样的 git-svn 和 svn CRLF 问题?

标签 git newline git-svn eol core.autocrlf

我正在使用 git svn,今天我遇到了一些麻烦。

我做了一个 git svn clone 并在我的项目上工作了一段时间。几天后,我将我的工作推送到 svn 远程 (git svn dcommit)。然后我尝试用 TortoiseSVN 检查项目,看看是否一切正常。不幸的是,所有内容都转换为 Unix 行尾,VC6 无法打开该项目。

因此,我的 git 工作副本是 CRLF,但我的 svn 工作副本是 LF。我假设 git 在 git commitgit svn dcommit 期间转换了它。

如果我为我的 git 工作副本设置 core.autocrlf = false,我是否可以假设我可以避免所有这些麻烦?这会迫使 git 单独留下换行符吗?为了使 git svn 易于使用而不给我的同事带来麻烦,是否还有其他需要做的事情?

(可能还很有趣的是,我以前在同一台机器上使用过 git svn,没有触及设置,这是第一次发生这样的事情。)

最佳答案

Subversion 可以对单个文件进行 EOL 转换设置。实际上 Git 也以 .gitattributes 文件的形式拥有它('text' 和 'eol' 属性)。 对于一般情况,core.autocrlf 是不够的。

如果你将它设置为 false,所有带有 svn:eol-style=native 的文件都将有一个 LF 行以 git-svn 工作副本结尾,这不是 windows 所期望的。

如果设置为true,所有的行尾都会被转换为LF,并以LF的形式发送给SVN(总是)。

其实svn:eol-style=unset应该对应git的'-text'属性(即不转换),svn:eol-style=LF -- - 'eol=lf' 属性和 svn:eol-style=CRLF --- 'eol=crlf' 属性; svn:eol-style=native 依赖于系统,因此可以通过未版本化的 eol 设置进行控制,因此相应的 git 属性是 '!eol'(这意味着从 core 获取 EOL 设置.git/config 的 .eol)。

除了 git-svn,您可以使用任何将 svn:eol-style 自动转换为单个文件的相应 .gitattirbutes 值的解决方案,反之亦然。 一种解决方案是服务器端:您安装 SubGit进入您的 SVN 存储库并仅使用 SubGit 将创建的纯 Git 界面:

$ subgit install path/to/svn/repository
# Git interface with correct .gtattributes repository will appear at path/to/svn/repository/.git
# you should setup an access to it

然后在客户端克隆它并将 core.eol 设置为 Windows 的“crlf”和其他操作系统的“lf”(默认值为“lf”)。

$ git clone <URL> working_tree
$ cd working_tree
$ git config core.eol crlf #for Windows only

之后 Git 将以与 SVN 相同的方式运行。

或者在客户端,您可以使用 SmartGit :您可以使用它克隆 SVN 存储库(不打开现有的 git-svn 存储库)--- 然后它将 svn:eol-style 转换为 .gitattributes。这种情况不需要额外的 core.eol 设置,SmartGit 会关心它。

关于git - 我如何避免像这样的 git-svn 和 svn CRLF 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11884394/

相关文章:

git - 构建Giraph时出现编译错误

git - 如何在不使用 reset 的情况下撤消 git 中的快进 merge

javascript - 带有换行转义字符的字符串会破坏 Javascript 脚本

android - 在 TextView 上添加新行 `\n' 将不起作用

git - egit 和 git unstaged 文件显示不同的状态

git - 我可以将 Git 工作副本复制到另一台机器上吗?

git 从 develop 创建 master 分支

linux - 如何在git中检查一个文件从一个分支到另一个分支的变化量?

python - 在 Python 中匹配两条特定行之间的行的正则表达式

Git-2-SVN 迁移?