SVN Tips

  • 显示远程URL
$ svn info .
  • 撤消某个文件的修改
$ svn revert foo.c
  • 递归撤消所有修改
$ svn revert --recursive .
  • 删除本地缺失的文件
$ svn status | grep ^! | awk '{print $2}' | xargs svn rm
  • 添加未跟踪的文件
$ svn status | awk '/\?/ {print $2}' | xargs svn add
  • 切换SVN账号
$ svn relocate protocol://currentUser@server/path protocol://newUser@server/path
  • 禁止存储密码
$ vim ~/.subversion/servers
store-passwords = no
  • 编辑忽略文件列表

设置SVN_EDITOR

$ set SVN_EDITOR="C:\Program Files\notepad++\notepad++.exe"

然后编辑忽略文件列表

$ svn propedit svn:ignore .
.git
*.db
*.opendb
*.obj
*.gem
*.exe
*.laccdb
*.sdf
*.suo
*.user
*.userosscache
*.sln.docstates
~$*.*
[Dd]ebug
[Dd]ebugPublic
[Rr]elease
[Rr]eleases
build
bld
bin
ipch
.vs
[Oo]bj
msbuild.log
packages
utmp

保存关闭编辑器即生效

如果使用TortoiseSVN也可以在属性编辑器中编辑:在文件管理器中进入SVN仓库的目录 -> 右键 -> TortoiseSVN -> Properties -> New… -> Other -> 设置 Property Name 为 svn:ignore -> 设置 Property Value 为要忽略的匹配符,如果要递归应用,勾选 Apply property recursively.

  • 设置文件的Mime属性
def propset_mime(exts, mime_type)
    files = Dir.glob("**/*.{#{exts.join(',')}}")
    files.each { |f|
        cmd = "svn propset svn:mime-type #{mime_type} \"#{f}\""
        puts cmd
        system(cmd)
    }
end

# 递归设置所有的.jpg .JPG文件

propset_mime(['jpg', 'JPG'], 'image/jpg')
  • 设置文件的可执行属性
def propset_exec(exts)
    files = Dir.glob("**/*.{#{exts.join(',')}}")
    files.each { |f|
        cmd = "svn propset svn:executable ON #{f}"
        puts cmd
        system(cmd)
    }
end

# 递归设置所有的.rb .sh .js文件

propset_exec(['rb', 'sh', 'js'])
  • 在 Ubuntu Server 上记住账号密码

修改 ~/.subversion/config

[auth]
password-stores = gpg-agent

修改 ~/.subversion/servers

[global]
store-passwords = yes

更新 ~/.bashrc.local

export GPG_TTY=$(tty)
export GPG_AGENT_INFO=`gpgconf --list-dirs agent-socket | tr -d '\n' && echo -n ::`

配置 ~/.gnupg/gpg-agent.conf

default-cache-ttl 34560000
max-cache-ttl 34560000

gpg-agent 默认有效期为 600 秒,上面改为了约 400 天

最后,执行 svn update,第一次输入密码后续记住即可。

参考:

https://stackoverflow.com/questions/48390012/subversion-https-password-caching-using-gpg-agent

https://superuser.com/questions/624343/keep-gnupg-credentials-cached-for-entire-user-session