如何从 svn 命令行恢复目录的几个属性之一?
我的 svn trunk 有一个属性 svn:externals 用于导入外部 repo。
/trunk
svn:external = /external/trunk
当我建立一个新的分支 foo 时,外部也更改为指向一个分支:
/branches/foo
svn:external = /external/branches/foo
有时,当我将分支合并回主干时,该属性会被复制过去,最终得到:
/trunk
svn:external = /external/branches/foo
通常我可以运行svn revert . --depth=empty
来撤消属性合并,但目录中还有其他属性也会被恢复,特别是svn:mergeinfo
。从我的 GUI 客户端,我可以很容易地恢复单个属性,但我并不总是记得这样做。有没有办法直接从 svn cmd 行执行相同的操作,或者我需要编写一些疯狂的包装器来svn propget
获取和撤消差异?
答案1
svn propset svn:externals "$(svn propget svn:externals . -r HEAD)" .
这会将属性设置为 HEAD 值。这是一个有效的解决方法,因为revert
只能应用于全部属性,并且不存在个人特性。
答案2
这对我来说比对你来说更重要,因为你可能已经有答案了……
svn propget PROPNAMETOREVERT `svn info | perl -ne 'print if s/URL: (.*)/\1/'` | perl -ne 'chomp; print' | svn propset PROPNAMETOREVERT -F - .
对我有用(在一行属性上,可能需要修改多行属性)。
这显然可以作为一个脚本:-)