我可以制作git-svn句柄svn:eol-style?

时间:2010-01-24 14:52:03

标签: git git-svn

许多svn存储库要求新文件具有svn:eol-style属性。有没有办法确保git-svn会发生这种情况?

3 个答案:

答案 0 :(得分:12)

您可以尝试在subversion配置中设置autoproperties([1] [2])。它将确保在新文件的添加操作期间svn:eol-style设置正确。

AFAIU git-svn只是在内部工作中使用svn,它应该加载subversion配置,并为新文件设置auto-props。

好的,我测试了它,它有效。

示例.subversion / config:

[miscellany]
enable-auto-props = yes

[auto-props]
*.cpp = svn:keywords=Id Revision;svn:eol-style=native
*.cs = svn:keywords=Id Revision;svn:eol-style=native

答案 1 :(得分:8)

@silk's answer above只是部分解决方案。完整的解决方案还包括配置git以在提交时将CRLF转换为LF。所以,除了@silk所建议的,你还应该这样做:

git config --global core.autocrlf input
git config --global core.safecrlf warn

或者:

git config --global core.safecrlf warn
git config --global core.attributesfile ~/.gitattributes
echo '* text=auto' >> ~/.gitattributes

说明:

根据我的经验,git-svn会在提交时设置svn:eol-style=native属性,如@silk描述的那样,但实际上会在提交之前将提交的文件转换为LF行结尾。因此,任何CRLF行结尾都将完整地提交给subversion repo,但是subversion期望所有svn:eol-style=native属性文件都与LF行结尾一起存储。最终结果是,第一次有人编辑并从subversion工作副本提交这样的文件时,diff将包括CRLF到LF的转换。

因此,一个完整的解决方案应该包括强制git在提交之前将文件转换为LF行结尾。您可以通过设置core.autocrlf=input来执行此操作,这意味着“在提交时将所有CRLF转换为LF,但在结帐时不执行反向转换”,以及core.safecrlf=warncore.safecrlf=true,这将是当您尝试使用CRLF行结尾提交文件时警告或停止。 autocrlf设置将确保转换这些CRLF,因此safecrlf=true可能过多。请参阅git help config

或者,您可以通过在所有文件上设置text=auto来使用git属性强制进行转换。要在全局范围内执行此操作,您需要在core.attributesfile中指定属性文件。请参阅git help attributes

答案 2 :(得分:2)

考虑使用SubGit

从最初的构建开始,它支持适当的Subversion属性到.gitattributes / .gitignore转换(反之亦然)。其中包括svn:eol-style和'eol',svn:mime-type和'text',svn:ignore和.gitignore conversion。

SubGit是服务器端解决方案 - 必须将其安装到Subversion存储库中。之后,可以使用任何Subversion或Git客户端将更改发送到此存储库。请参阅SubGit documenration以获取更多详细信息。一般来说,使用起来相当容易:

  1. 生成SubGit配置文件:

    $ subgit configure svn_repos
    
  2. 根据需要调整svn_repos / conf / subgit.conf文件以指定Git存储库位置,分支和&标签布局等

  3. 完成安装:

    $ subgit install svn_repos
    
  4. 此时,SubGit会将Subversion存储库中的所有修订转换为Git存储库。然后它安装其自定义挂钩以由传入的修改触发。这样SubGit就可以在每次svn提交时继续转换Subversion修订版,并在每次git推送时提交Git提交。

    SubGit是一个商业项目,但它对于小型团队,开源和学术项目是免费的。我是SubGit开发人员之一。