Git SVN如何配置以支持Svn自动属性($Date$等)的替换?
Git SVN 实现SVN关键字替换的配置方案
SVN里的$Rev$、$Date$、$Author$这类关键字替换,是依赖SVN的自动属性和关键字展开机制实现的。但Git本身默认不支持这类SVN关键字,git-svn也不会自动继承SVN端的属性配置,所以拉取后变量没被替换是机制差异,不是缺陷。要实现和SVN一致的效果,可按以下方式配置:
方法一:利用git-svn内置关键字支持
- 编辑本地Git仓库的
.git/config文件(或全局~/.gitconfig),找到[svn-remote "svn"]段,添加关键字映射:
[svn-remote "svn"] fetch = trunk:refs/remotes/svn/trunk keywords = Author Date Rev
如果没有这个段,手动添加上述内容即可(fetch路径根据你的SVN仓库结构调整)。
- 在仓库根目录创建或编辑
.gitattributes文件,添加SQL文件的规则:
*.sql ident
ident属性会让Git识别并替换关键字,Git的$Id$会包含版本信息,和SVN的$Rev$等格式略有不同,但能实现类似的版本信息注入效果。
方法二:自定义过滤器实现精准匹配
如果需要完全复刻SVN的$Rev$、$Date$、$Author$格式,可自定义Git过滤器:
- 编辑
.git/config,添加过滤器配置:
[filter "svn-keywords"] clean = sed -e 's/\\$Rev\\$/$Rev$/' -e 's/\\$Date\\$/$Date$/' -e 's/\\$Author\\$/$Author$/' smudge = sed -e "s/\\$Rev\\$/$Rev: $(git svn info | grep 'Revision' | awk '{print $2}')$/" -e "s/\\$Date\\$/$Date: $(git svn info | grep 'Last Changed Date' | awk '{print $4, $5, $6}')$/" -e "s/\\$Author\\$/$Author: $(git svn info | grep 'Last Changed Author' | awk '{print $4}')$/"
- 编辑
.gitattributes,指定SQL文件使用该过滤器:
*.sql filter=svn-keywords
注意:每次用git-svn拉取新版本后,需要执行git checkout HEAD -- .触发smudge操作,才能更新文件里的关键字内容。
内容的提问来源于stack exchange,提问作者Joseph K
相关产品推荐
相关产品推荐

