9

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

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

所以,我的 git 工作副本是 CRLF,但我的 svn 工作副本是 LF。我假设 git 在git commit或期间对其进行了转换git svn dcommit

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

(值得一提的是,我之前在同一台机器上使用过 git svn,没有触及设置,这是第一次发生这种情况。)

4

1 回答 1

0

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

如果将其设置为 false,则所有具有 svn:eol-style=native 的文件都将以 git-svn 工作副本结尾的 LF 行,这对于 Windows 来说是不期望的。

如果将其设置为 true,则所有行尾都将转换为 LF,并以 LF 的形式(始终)发送到 SVN。

实际上svn:eol-style=unset应该对应 '-text' git 属性(这意味着没有转换),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 会关心它。

于 2012-08-09T15:01:57.660 回答