8

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

例如考虑以下目录布局:

calc+-主干
    |-分支机构
    |-标签

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

$ 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

(也许上面的 URL 是复制粘贴的,而是一个分支)

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

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

4

2 回答 2

7

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

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

您可以通过控制文件控制挂钩(该控制文件甚至可以驻留在存储库中以便于访问)。第一行防止任何人写入/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
于 2013-07-03T01:42:12.347 回答
1

您有三个选项,从最简单/最快到最复杂。

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