2008-09-11 39 views
39

如何在存储库中存储文件权限?有几个文件需要是只读的,以阻止第三方程序对其进行垃圾回收,但在检出存储库后,它们将设置为可读写。在Subversion版本库中存储文件权限

我看着谷歌和发现了一个blog post from 2005指出Subversion不存储文件的权限。列出了修补程序和挂钩脚本(只有一个url仍然存在)。三年后,Subversion仍然没有存储文件许可权,并且是唯一可以实现这一目标的方法吗? (我从来没有做过钩,而使用的东西是原产于颠覆。)

+1

良好的老问题。但是,答案一直持续到今天。除+ x之外,无法将chmod更改为SVN文件。 我在git中漫游 – confiq 2010-11-28 16:14:08

+1

@confiq很可能在git中。实际上,您可以提交只修改权限的更改。不过,我不知道,如果你把那个承诺svn的:) – 2013-09-25 14:11:08

回答

9

一个可能的解决办法是写你与你的代码和其余检查在脚本运行为第一你的构建过程的一步。

此脚本运行您的代码库副本并设置某些文件的读取权限。

理想情况下,脚本会从简单的输入文件读取文件列表。 这可以使其他开发人员易于维护和轻松了解哪些文件被标记为只读。

+0

惊喜会发生什么:颠覆似乎确实改变* *权限,当您提交:( – 2014-03-17 19:53:31

-6

考虑使用svn lock从写入文件禁止他人。

0

锁定无法解决此问题。锁定会阻止他人编辑文件。这是一个第三方应用程序,作为试图写入文件的构建过程的一部分运行 - 更改它 - 这打破了构建过程。因此,我们需要停止程序改变文件,只是将文件标记为只读文件。我们想在仓库举行的信息和整个签入,树枝进行等

0

Graham,svn不存储权限。您唯一的选择是将您的电话打包到脚本中的svn。脚本应该使用它的参数调用svn,然后设置权限。根据您的环境,您可能需要调用脚本svn并调整您的PATH以确保它被调用。

我非常喜欢morechilli的想法,将文件和权限列表签入存储库本身。

0

我们为我们创建了一个批处理文件。宁愿在颠覆实际的支持,虽然...

13

有没有本地的方式来存储SVN文件的权限。

来自该博客帖子的asvnthe patch似乎已经启动(并且托管在官方SVN存储库中),这是一件好事,但我不认为他们在任何时候都会在核心版本中进行这样的元数据处理不久。

SVN已经有能力专门处理symbolic linksexecutables很长一段时间,但在Win32上都无法正常工作。我不认为我的呼吸不为其他非便携式功能(尽管它不会太强,很难对现有的元数据系统之上实现的。)

我会考虑写一个shell脚本来手动调整文件权限,然后将其放入存储库。

+0

asvn正式版(截至目前)似乎并不在工作目录中处理大量被忽略的文件(它有非常嘈杂的输出),这里有一个补丁修复http://mail-archives.apache.org/mod_mbox/subversion-dev/201005.mbox/%3C4BE1A4F0。 [email protected]%3E;由于某些原因,它仍然没有到主线回购 – Nickolay 2011-05-15 16:27:39

+0

上面的asvn链接已更改为:[asvn](https://svn.apache.org/repos/ asf/subversion/trunk/contrib/client-side/asvn)在遵循以上这些线索之后,我发现了一些可能更好的替代方法:[http://fsvs.tigris.org/](http://fsvs.tigris .org /)并可能:[https://trac.dass-it.de/pub/wiki/dasscm](https://trac.dass-it.de/pub/wiki/dasscm) – 2014-04-10 01:38:03

36

SVN确实有能力存储元数据(properties)以及一个文件。这些属性基本上只是键/值对,但是有一些特殊的键,如'svn:executable',如果该属性存在于文件中,Subversion会在检出文件时为该文件设置文件系统的可执行位。虽然我知道这不是你正在寻找的东西,但它可能就够了(对我来说)。

行结尾还有其他一些属性(svn:eol-style)和mime类型(svn:mime-type)。

+2

我意外地向上 - 因为它已经投票了原始文件的链接。但我希望我可以收回,因为这个答案似乎意味着可以用这种方式设置读/写文件权限。 – MarkHu 2012-07-05 22:33:26

1

@morechilli:

从我先前的职位的asvn包装,并在OP的帖子在博客似乎做你所建议。虽然它将权限存储在相应文件的存储库属性中,而不是单个外部文件。

3

This是SVN补丁的更新链接,它正确处理unix样式的文件权限。我已经在fedora12上进行了测试,并且似乎按预期工作:

我刚刚保存了它/ usr/bin/asvn并使用asvn而不是svn命令,如果我需要正确处理权限。

1

我建议使用mtree实用程序(FreeBSD默认使用它)生成权限映射,将地图存储在存储库中,并且如上所述,运行一个脚本,以便从地图恢复适当的文件许可权构建过程的第一步。

3

很多答案都指出svn不存储文件权限。这可能是真的,但我能解决一个dll文件没有执行权限的问题简单地通过下列步骤操作:

  1. 搭配chmod 755 badpermission.dll
  2. MV badpermission.dll ../
  3. SVN更新
  4. SVN RM badpermission.dll
  5. SVN提交badpermission.dll -m “删除DLL修复权限”
  6. MV ../badpermission.dll。
  7. SVN添加badpermission.dll
  8. SVN提交badpermission.dll -m “添加DLL回修复权限”
  9. RM badpermission.dll
  10. SVN更新
  11. badpermission.dll回来与执行权限
4

由于这在以前的回复中还没有完全说明。我讨厌复活僵尸线程。

由于增加了对SVN许可支持将不得不适应多种操作系统和权限类型,NFS,POSIX,ARWED和RACF

这将使得SVN臃肿,可能与冲突的许可类型,如NFS和POSIX,或发生冲突打开可能的漏洞/安全漏洞。

有几个解决方法。预先提交,提交后提交,启动提交是更常用的,并且是Subversion系统的组成部分。 但是,您可以使用您喜欢的任何编程语言来控制权限。

我实现的系统就是我所说的打包程序,它验证工作副本的提交文件,然后解析元数据文件,其中列出了文件/文件夹所需的默认权限,以及对它们所做的任何更改欲望。

Owner, Group, Folders, Files 
default: <user> www-user 750 640 
/path/to/file: <user> non-www 770 770 
/path/to/file2: <user> <user> 700 700 

您还可以进一步扩展,这一点,让事情,如自动移动,重命名它们,通过类型标签的修订,如α,β,发布候选版本,释放

至于支持客户结帐的具有附加权限的存储库文件。您最好考虑创建包的安装程序并将其作为资源提供。

想象人们设置他们的仓库在它的可执行文件设定根权限:WWW用户4777