据我所知,git-svn只是在内部使用svn,并且它应该加载subversion配置并为新文件设置自动属性。
好的,我测试过了,它可以工作。
示例.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
@silk的上面的答案只是部分解决方案。完整的解决方案还包括配置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行结束符都将完整地提交到子版本库中,但是子版本控制器希望所有具有svn:eol-style=native
属性的文件都以LF行结束符存储。最终结果是,第一次有人从子版本工作副本编辑和提交这样的文件时,差异将包括CRLF到LF的转换。
因此,完整的解决方案应包括强制git在提交之前将文件转换为LF行结束符。您可以通过设置core.autocrlf=input
来实现这一点,这意味着“在提交时将所有CRLF转换为LF,但不要在检出时进行反向转换”,以及core.safecrlf=warn
或core.safecrlf=true
,这将在您尝试提交具有CRLF行结束符的文件时发出警告或阻止您。 autocrlf
设置将确保这些CRLFs得到转换,因此safecrlf=true
可能过度了。请参阅git help config
。
或者,您可以使用git属性来强制转换,通过在所有文件上设置text=auto
。要在全局范围内执行此操作,您需要在core.attributesfile
中指定一个属性文件。请参阅git help attributes
。
dos2unix
转换行尾,然后 git add
文件;不需要 git commit
,因为预期是 LF 行尾。 - ntc2Generate SubGit configuration file:
$ subgit configure svn_repos
Adjust svn_repos/conf/subgit.conf file as needed to specify Git repository location, branches & tags layout, etc.
Finish the installation:
$ subgit install svn_repos
git-svn
将在提交时设置svn:eol-style=native
属性,就像您描述的那样,但实际上不会在提交之前将提交的文件转换为LF行结尾。因此,任何CRLF行结尾都将完整地提交到子版本库中,但是子版本控制器希望所有具有svn:eol-style=native
属性的文件都以LF行结尾存储。最终结果是,第一次有人从子版本工作副本编辑和提交这样的文件时,差异将包括CRLF到LF的转换。 - ntc2