![svn 恢复目录上的单个属性?](https://linux22.com/image/1255740/svn%20%E6%81%A2%E5%A4%8D%E7%9B%AE%E5%BD%95%E4%B8%8A%E7%9A%84%E5%8D%95%E4%B8%AA%E5%B1%9E%E6%80%A7%EF%BC%9F.png)
如何从 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 - .
对我有用(在一行属性上,可能需要修改多行属性)。
这显然可以作为一个脚本:-)