如何以只读方式获取svn:externals的功能?

18

svn:externals可以很好地将中央库或IP引入项目,以便它们可以保持在一个位置,并对所有人可访问。

但是,如果我要求人们外部标记常见的IP(这样它们就不会改变),那么他们无意中提交更改的可能性就会打开。

如何使svn:externals只读?如果有一些额外的参数或某种方法可以添加到过程中以供每个人遵循,那么这是可以接受的。


2
我理解人们对于这不应该是必需品的看法。你也不需要一个停车刹车,但使用它是个好主意。如果能够在不修改Apache的情况下实现这一点,那就太好了,因为大多数用户没有管理员权限。 - rdb78
请注意,默认情况下,命令行界面在提交时不会递归到外部。当从父工作目录调用提交时,在Tortoise GUI中,外部更改会变灰。这使得意外提交到外部项目的可能性较小。 - raek
4个回答

5
使用svn仓库钩子来避免提交到特定目录,例如标签
如果您使用ttb(trunk,tags,branches)命名约定,并且只读svn:external访问的代码位于tags目录中,则可以使用pre-commit hook来避免提交到这些目录。
以下是详细信息: SVN pre-commit hook for avoiding changes to tags subdirectories

似乎这是实现OP想要的最佳方式。 - Andy

3

将外部仓库设为只读,除其维护者之外其他人无法修改。


2
如果您不想通过外部提交维护者,但需要维护代码,该怎么办? - Andy
1
可能大多数开发人员都是两个位置上的维护者。 - n611x007

1
使外部存储库对维护者以外的所有人只读。
我完全同意J. John上面的答案。创建一个pre-commit hook是过度设计了。svn:externals(仅是对外部存储库的引用,因此得名)仍然在单独的存储库中(您可以通过进入已检出的外部并执行'svn info | grep URL'来验证),因此只需在该外部存储库中放置必要的权限即可。类似于:
[external_repo]
@maintainer = rw
@others = r

从定义为“external”的repo(让我们称外部repo为repoB)中获取的内容,您无需做任何操作。当除@maintainers成员之外的其他人尝试通过从repoA检出的代码提交到外部repo时,提交将被重定向到外部repoB,因此,您在该repo上设置的权限将会生效并阻止提交。

希望这有助于澄清事情。

Ismael Casimpan :)


1
如果大多数开发人员都是两个位置的维护者呢? - n611x007

1
实际上,TortoiseSVN 通过提交钩子检测到您正在尝试提交标签,并警告用户,这基本上满足了我的速度限制要求。所以我们已经很好了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接