subversion/svn的设计还是非常棒的!子命令清晰明了,外围工具或plugin有时不能work,还必须用命令行(根本入手)。
当时对scalability需求不强,所以没有像git, mercurail一样设计分布式。所以,这几年用svn少了一些。但对小项目足够了。
1. 外部editor
很多命令可能用外部editor,有时不用还搞不定(如下面的设置ignore list)。
* 可以在.profile里 export SVN_EDITOR=vim (or mate)
* 其实一般用editor来写一些命令参数args,如 svn pe svn:ignore . 这样打开一个svn*.tmp的文件,保存即可
* 使用时指定tmp文件, svn ps svn:ignore --file svn-prop.tmp .
2. ignore文件和目录
$ svn export spool spool-tmp
$ svn rm spool
$ svn ci -m 'Removing inadvertently added directory "spool".'
$ mv spool-tmp spool
$ svn propset svn:ignore 'spool' .
$ svn ci -m 'Ignoring a directory called "spool".'
3. ignore多个文件和目录
上面的方法只能是对一个目录和文件有效
多个的话,后面的文件会覆盖前面文件,可以用svn pg svn:ignore来查(反馈是多少重要)
此时可用 svn ps svn:ignore --file svn-prop.tmp . 把ignore list写在.tmp文件里
svn-prop.tmp:
dir1
dir2
dir3
4. 暴力解决问题
有时svn死活管不好,往往出现在目录移动上。这时就把目录下.svn目录删掉。
update 肯定会冲突,不怕。用svn resolve --acept working , 然后再把需要svn add回去,再svn ci
5. 多用缩写
svn st 比svn status好打多了
6. 批量操作
svn delete $(svn status | sed -e '/^!/!d' -e 's/^!//')
svn add $(svn status | sed -e '/^?/!d' -e 's/^?//')
7. 切换库
svn switch --relocate svn://58.61.1.1/genius/master svn://192.168.1.1/genius/master
8. 外部引用
svn ps svn:externals --file external.txt .
external.txt
lib/zlib svn://192.158.1.100/a/b/lib/zlib
这样就可以多个项目引用基础库了!
9. 暴力删除svn:external
svn propdel -R svn:externals
10. 暴力删除svn的所有配置文件
find . -type d -name ".svn" |xargs rm -rf