适当的添加 svn:executable 的方法

117

我有一些在svn添加之前就可以执行的文件。它们已经设置了svn:executable属性。现在,另外一些没有可执行位的文件已经被检入,我想设置svn:executable属性:

$ svn propset svn:executable on *.cgi

然后我检查了状态,甚至拥有 svn:executable 属性的文件也已被修改:

$ svn diff
Property changes on: a.cgi
___________________________________________________________________
Modified: svn:executable
   - 
   + *


Property changes on: b.cgi
___________________________________________________________________
Added: svn:executable
   + *

a.cgi不应该被修改。我想以与其他文件相同的方式添加svn:executable位,但是我无法弄清要执行的命令。


2
每次我不想输入 svn propset svn:executable on (...) 时,我都会打开这个页面。而问题的答案应该是 for f in *.cgi; do if [ ! -x $f ]; then svn ps (...); fi; done,然后提交修改后的文件。然后继续进行下一步。 - Tomasz Gandor
@TomaszGandor 在第二段代码片段中似乎缺少 svn:executable,也许需要添加 svn ps svn:executable on $f; - Keith M
1
省略号(语言学):https://zh.wikipedia.org/wiki/%E7%9C%81%E7%95%A5%E5%8F%B7 - Tomasz Gandor
如果你随后运行 svn st -uq 命令,你会看到仅有的更改。 - pstanton
2个回答

180

您使用svn属性编辑命令是正确的。该属性是svn:executable。

要在svn中添加"可执行位",请使用svn属性编辑命令。

svn propset svn:executable on <list of files>

从 SVN 中删除“可执行位”

svn propdel svn:executable <list of files>

这里是SVN的相关文档。

关于不修改可执行文件,您并未修改可执行文件(校验和将进行验证),但您正在修改SVN存储库。请记住,SVN修订了文件系统,而不仅仅是文件;因此,即使只是修改了文件属性(而非文件本身),权限位的修改也会增加SVN修订号。


当我按照上面所示的方式运行svn propset时,它将它们设置为“*”,但是自然的方法会将svn:executable设置为nothing,但其仍然处于设置状态。我希望该属性与将其添加到Subversion之前设置其可执行位的属性相同。 - Jake
2
抱歉进行了多次编辑,但如果我记得正确的话,将其设置为任何值都会打开可执行位,删除它(可能将其设置为null或空格)将关闭它。要获取SVN客户端正在使用的值,可以使用svn propget。 - Edwin Buck

-1

以下是我如何在项目中设置所有带有执行位的*.py文件的可执行属性。我从顶层目录执行此操作。

for f in `find ./ -name '*.py'`; do echo $f; if [ -x $f ]; then echo $f 'is executable setting svn:executable'; svn propset svn:executable on $f; else echo $f 'is not executable'; fi; done;

不使用propset如何设置可执行属性?我没有使用它,据我所知,其他人也没有使用。它出现在同一目录下的三个文件中,但其他地方似乎没有,而且这些文件似乎没有什么特别之处。(它们是java文件,而不是sh、exe、bat或jar等。) - Jerry Miller
我相信,如果文件在最初导入时具有可执行位,则svn可执行属性将被设置。 - Isaac Jessop
相信find命令有一个-perm开关,可能比if/then语句更优雅一些,但当然需要记住更多的内容。 - Never Sleep Again

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