You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SVN工作流中传递修订关键字的问题及纯SVN实现方案问询

没问题,仅用SVN完全能实现你的需求!你之前觉得SVN不支持按文件类型配置关键字是个误解,其实它的属性系统和关键字功能足够灵活来解决你的问题,下面是具体的实现方案:

核心思路:差异化关键字配置 + 自定义占位符

通过给不同类型的文件设置不同的svn:keywords规则,让SVN只处理每个文件专属的关键字占位符,避免覆盖从其他文件导入的修订信息。

1. 按文件类型自动配置关键字属性

SVN的auto-props功能可以帮你根据文件扩展名自动应用不同的svn:keywords,不管是客户端还是服务器端都能配置:

  • 客户端配置:打开你的SVN配置文件(Linux/macOS是~/.subversion/config,Windows是%APPDATA%\Subversion\config),找到[auto-props]区块,添加以下规则:
    *.txt = svn:keywords=Revision  # 对应你的文件1(文本类型)
    *.xml = svn:keywords=FileRevision  # 对应文件2、3(XML类型)
    
    这样文本文件默认启用Revision关键字,XML文件默认启用自定义的FileRevision关键字,两者互不干扰。
  • 服务器端配置:如果要强制所有团队成员遵循这个规则,可以修改服务器的svnserve.conf(搭配auto-props = yes)或Apache配置中的SVNAutoProps指令,实现全局生效。

2. 为文件2区分不同来源的修订号

在文件2中,你需要把来自文件1的修订号和自身的修订号用不同的占位符区分:

  • 从文件1导入的修订号保留原有的$Revision: $占位符(因为文件2的svn:keywordsFileRevision,SVN不会处理这个占位符,所以导入的内容不会被覆盖)。
  • 在文件2中新增一个自定义占位符$FileRevision: $,用来存储文件2自身的修订号。

提交文件2时,SVN只会替换$FileRevision: $为文件2的当前修订号,完全不会触碰从文件1导入的$Revision: $内容,完美保留你需要的文件1修订信息。

3. 生成文件3时获取修订号(纯SVN内置方式)

你的脚本生成文件3时,不需要依赖外部工具,直接用SVN的命令行工具获取文件1和文件2的修订号:

  • 获取文件1的修订号:svn info --show-item revision path/to/your-file1.txt
  • 获取文件2的修订号:svn info --show-item revision path/to/your-file2.xml

把这两个命令的输出结果写入文件3的对应位置即可,这完全属于SVN的内置功能,符合你“仅通过SVN实现”的要求。

4. 可选:锁定属性防止误修改

为了避免团队成员误修改文件2的svn:keywords属性,你可以给文件2设置svn:needs-lock属性,这样只有锁定文件的用户才能修改属性:

svn propset svn:needs-lock yes path/to/your-file2.xml
最终效果验证
  • 提交文件1后,$Revision: $会被替换为文件1的修订号;
  • 导入文件1的内容到文件2后,提交文件2时,只有$FileRevision: $会被替换为文件2的修订号,文件1的修订号完整保留;
  • 生成文件3时,通过SVN命令获取前两个文件的修订号并写入,满足1 < 2 < 3的修订要求。

内容的提问来源于stack exchange,提问作者Ben Hirsig

火山引擎 最新活动