在Subversion存储库中存储文件权限
如何在存储库中存储文件权限?一些文件需要是只读的,以阻止第三方程序对其进行垃圾回收,但从存储库中检出它们后,它们将被设置为可读写。
我在Google上搜索时发现了2005年的一篇博客文章,指出Subversion不存储文件权限。列出了补丁和挂钩脚本(仅存在一个URL)。三年后,Subversion仍不存储文件许可权,而钩子是实现此目的的唯一方法吗? (我从来没有做过钩子,而是使用了Subversion固有的东西。)
解决方案
回答
考虑使用svn lock
禁止其他人写入文件。
回答
锁定无法解决此问题。锁定会阻止其他人编辑文件。这是第三方应用程序,它在构建过程中运行,该过程试图写入更改它的文件,这会破坏构建过程。因此,我们需要停止程序更改文件,而这只是将文件标记为只读。我们希望将这些信息保存在存储库中,并在签入,分支等之间携带。
回答
一种可能的解决方案是编写一个脚本,将其与其余代码一起签入,并在构建过程的第一步中运行。
此脚本贯穿代码库副本,并设置对某些文件的读取权限。
理想情况下,脚本将从简单的输入文件中读取文件列表。
这将使其易于维护,并使其他开发人员易于理解哪些文件被标记为只读。
回答
Graham,svn
不存储权限。唯一的选择是将对svn
的调用包装在脚本中。该脚本应使用其参数调用svn
,然后再设置权限。根据环境,我们可能需要调用脚本" svn"并调整" PATH"以确保其被调用。
我非常喜欢morechilli的想法,即将文件列表和权限列表检入存储库本身。
回答
我们创建了一个批处理文件来为我们做这件事。宁愿在颠覆中提供实际支持,但...
回答
没有本地方法可以在SVN中存储文件权限。
asvn和该博客文章中的补丁似乎都已启动(并托管在SVN官方存储库中),这是一件好事,但我认为它们不会很快在核心版本中进行此类元数据处理。
SVN长时间以来一直具有处理符号链接和可执行文件的能力,但在Win32上均无法正常工作。我不会为另一个这样的不可移植的功能而屏住呼吸(尽管在已经存在的元数据系统之上实现起来并不难)
我会考虑编写一个Shell脚本来手动调整文件权限,然后将其放入存储库中。
回答
SVN确实具有存储元数据(属性)和文件的功能。这些属性基本上只是键/值对,但是有一些特殊的键,例如'svn:executable',如果该属性存在于文件中,则Subversion将在检出文件时设置该文件的文件系统可执行位。虽然我知道这并不是我们要找的东西,但可能就足够了(对我而言)。
行尾(svn:eol-style)和mime type(svn:mime-type)还有其他属性。
回答
@morechilli:
我以前的帖子中的asvn包装器以及OP帖子中的博客似乎都在执行建议。尽管它将权限存储在相应文件的存储库属性中,而不是单个外部文件。
回答
这是SVN修补程序的更新链接,可正确处理Unix样式文件权限。我已经对fedora12进行了测试,并且似乎可以按预期工作:
我只是保存了它/ usr / bin / asvn,如果我需要正确处理权限,请使用asvn而不是svn命令。
回答
我建议使用mtree实用程序(默认情况下FreeBSD拥有它)生成权限映射,将其存储在存储库中,并如上所述,运行脚本,该脚本将从映射中恢复适当的文件权限,这是该操作的第一步。构建过程。