如何关闭subversion标签分支?

时间:2013-07-02 19:10:12

标签: svn tags branch

标签在Subversion中实现为分支。因此,我的问题是:在创建Subversion标记之后 - 如何关闭此分支,以便没有人意外地将更改集添加到该标记分支?

例如,请考虑以下目录布局:

calc+-trunk
    |-branches
    |-tags

在某些时候,主干已准备好发布并被标记:

$ svn cp svn://example.net/calc/trunk svn://example.net/calc/tags/v1.0

现在可能发生以下事故:

$ svn co svn://example.net/calc/tags/v1.0
$ cd v1.0
$ # change files
$ svn ci

(也许上面的网址是拷贝'n'pasted,而不是分支)

如何关闭分支calc/tags/v1.0以使最后svn ci失败?

我称之为关闭 - 或者你可以调用该操作将分支切换到只读模式 - 或类似的东西。

2 个答案:

答案 0 :(得分:7)

您可以通过预提交挂钩来控制提交。 This one将允许您创建,但不能编辑标签。您可以控制对分支的访问(防止对其进行更改或保留谁可以对选定的一组人进行更改)。

当我意识到用户可能会意外地编辑标签而没有意义时,我创建了原始副本。我想要一种用户可以创建标签的方法,但是一旦标签创建就无法修改标签。

您可以通过控制文件控制挂钩(该控制文件甚至可以驻留在存储库中以便于访问)。第一行阻止任何人写入/tags目录(或任何子目录)。第二个允许用户将分支复制到新标记,但是它们不能修改该标记中的任何内容。

[FILE You cannot edit a tag once it's been created]
file = /tags/**
access = read-only
users = @ALL

[FILE You cannot edit a tag once it's been created]
file = /tags/*
access = add-only
users = @ALL

你可以在分支中做同样的事情。在这里,2.2分支完全被锁定,只有Bob和Carol可以在准备发布时更改2.3分支:

[FILE No one is allowed to touch the 2.2 branch. It is dead]
file = /branches/2.2
access = read-only
users = @all

[FILE Only Bob and Carol can make changes to the 2.3 branch]
file = /branches/2.3/**
access = read-only
users = @ALL

[FILE Only Bob and Carol can make changes to the 2.3 branch]
file = /branches/2.3/**
access = read-write
users bob, carol

答案 1 :(得分:1)

您有三种选择,从最简单/最快到最复杂。

  1. 删除分支(它没有真正删除,您可以随时检索它)。
  2. 在基于路径的授权配置文件中创建规则(假设您使用一个)拒绝写入该路径。
  3. 安装(或修改,如果已存在)预提交钩子脚本以拒绝对该路径的任何提交。