如何在存储库中存储文件权限?一些文件需要是只读的,以阻止第三方程序废弃它,但在退出存储库后,它们被设置为读写。
我查看了谷歌,发现blog post from 2005表明Subversion不存储文件权限。列出了补丁和钩子脚本(只有一个URL仍然存在)。三年之后,Subversion仍然没有存储文件权限,并且挂钩是解决这个问题的唯一方法吗? (我从未做过钩子,而是使用Subversion原生的东西。)
答案 0 :(得分:36)
SVN确实能够存储元数据(properties)和文件。属性基本上只是键/值对,但是有一些特殊的键,如'svn:executable',如果文件存在此属性,Subversion将在检出文件时为该文件设置文件系统的可执行位。虽然我知道这不是你想要的,但它可能就足够了(对我而言)。
行结尾还有其他属性(svn:eol-style)和mime类型(svn:mime-type)。
答案 1 :(得分:14)
在SVN中没有以本机方式存储文件权限。
该博客文章中的asvn和the patch似乎都已启动(并托管在官方SVN存储库中),这是一件好事,但我认为他们不会拥有此类元数据随时处理核心版本。
SVN已经能够长时间处理symbolic links和executables,但在Win32上都无法正常工作。我不会屏住另一个这样的非便携式功能(尽管在现有的元数据系统之上实现它并不会太难。)
我会考虑编写一个shell脚本来手动调整文件权限,然后将其放入存储库中。
答案 2 :(得分:10)
一种可能的解决方案是编写一个脚本,用您的其余代码签入,并作为构建过程的第一步运行。
此脚本会运行您的代码库副本,并设置对某些文件的读取权限。
理想情况下,脚本会从简单的输入文件中读取文件列表。 这将使其易于维护,并且易于其他开发人员了解哪些文件被标记为只读。
答案 3 :(得分:4)
由于在之前的回复中尚未完全说明。我讨厌复活僵尸线程。
由于添加对SVN的权限支持必须适应多种操作系统和权限类型,NFS,POSIX,ARWED和RACF
这会使SVN臃肿,可能与NFS和POSIX等冲突的权限类型发生冲突,或者打开可能的漏洞/安全漏洞。
有几种解决方法。 pre-commit,post-commit,start-commit是更常用的,也是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
您还可以对此进行扩展,并允许自动移动,重命名,按类型标记修订,如alpha,beta,候选版本,发布
等内容支持客户端检查附加了权限的存储库文件。您最好考虑创建软件包的安装程序并将其作为资源提供。
想象一下,人们使用root设置可执行文件来设置他们的存储库:www-user 4777
答案 4 :(得分:3)
This是SVN补丁的更新链接,可正确处理unix样式文件权限。我已经测试了fedora12,似乎按预期工作:
我刚保存它/ usr / bin / asvn并使用asvn而不是svn命令,如果我需要正确处理权限。
答案 5 :(得分:3)
许多答案都声明svn不存储文件权限。这可能是真的,但我能够通过以下步骤解决没有执行权限问题的dll文件:
答案 6 :(得分:1)
@morechilli:
我早前帖子中的asvn包装器和OP帖子中的博客似乎正在做你的建议。虽然它将权限存储在相应文件的存储库属性中,而不是单个外部文件。
答案 7 :(得分:1)
我建议使用mtree实用程序生成权限映射(FreeBSD默认使用它),将映射存储在存储库中,并且如上所述,运行一个脚本,该脚本将从映射中恢复正确的文件权限构建过程的一步。
答案 8 :(得分:0)
锁定无法解决此问题。锁定会阻止其他人编辑文件。这是第三方应用程序,它作为构建过程的一部分运行,尝试写入文件 - 更改它 - 这会破坏构建过程。因此,我们需要停止程序更改文件,这只是将文件标记为只读。我们希望这些信息存储在存储库中,并通过签入,分支等方式进行。
答案 9 :(得分:0)
Graham,svn
不存储权限。您唯一的选择是在脚本中将您的呼叫包裹到svn
。脚本应该使用其参数调用svn
,然后设置权限。根据您的环境,您可能需要调用脚本svn
并调整PATH
以确保调用它。
我非常喜欢morechilli的想法,将文件和权限列表检入存储库本身。
答案 10 :(得分:0)
我们为我们创建了一个批处理文件。宁愿在颠覆中更喜欢实际支持......
答案 11 :(得分:-6)
考虑使用svn lock
禁止其他人写入该文件。