svn笔记

文件集合

文件集合的作用是,给文件划入集合后,可以指定某集合为操作目标,而不用重复地传入文件

  • 将文件YOUR_FILE划入集合YOU_CLNAME
    svn changelist YOU_CLNAME YOUR_FILE
    
  • 提交集合YOU_CLNAME下的文件
    svn commit --changelistYOU_CLNAME
    
  • 差异比较集合YOU_CLNAME下的文件
    svn diff --changelist LISTNAME
    

基于diff以文件为单位的打包

$YOUR_ROOTsvn工程,从$SRC_VERSION$DST_VERSION的内容进行差异打包

svn diff -r $SRC_VERSION:$DST_VERSION --summarize --username $USR --password $PSW --no-auth-cache |grep "^[AUM]" | awk '{print \$2}'| xargs -I {} cp --parents "{}" $YOUR_ROOT

基于patch差异内容的打包

svn patch -pN这里的N表式路径的层级,假设当前目录是在trunk,而文件utils.luas有本地修改

trunk
    + bin
        - svr_gateway
    + script
        + common
            - utils.lua
        + gatewary
    + data
        + config
  • -p0时,导出信息Index: script/common/utils.lua
  • -p1时,导出信息Index: common/utils.lua

忽略提交文件

~/.subversion/config启用配置global-ignores,并添加需要的忽略规则,如下

global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo

vimdiff

先已安装vimdiff

Debian: apt install -y vim
cat >> ~/vim_diff.sh<< EOF
#!/bin/sh
/usr/bin/vimdiff ${6} ${7}
EOF

~/.subversion/config添加如下配置

diff-cmd =  ~/vim_diff.sh
merge-tool-cmd =  ~/vim_diff.sh

基本操作

查看日志

  • 查看最近-l $YOUR_N条日志的-v详细信息
    svn log -l $YOUR_N -v
    

比较差异

  • 比较目标文件$YOUR_FILE与本地的差异
    svn diff $YOUR_FILE
    
  • 比较目标文件$YOUR_FROM历史版本与$YOUR_TO历史版本的差异。可通过log查看文件历史版本号
    svn diff -r$YOUR_FROM:$YOUR_TO
    
  • 版本$YOUR_VERSION与前一个版本比较
    svn diff -c $YOUR_VERSION
    

提交

  • $YOUR_MSG提交$YOUR_FILE文件
    svn commit -m "$YOUR_MSG" $YOUR_FILE
    
  • 显示冲突文件
    svn st | grep ^C & svn st | grep -E '^.{6}C'
    
  • 删除冲突文件
    svn st | grep -E '^.{6}C' | awk '{print $3}' | xargs -d'\n' -I {} svn del --force {}
    
  • 显示代码、场景、预制件、配置表
    svn st | grep -E '*.cs$|*.prefab$|*.unity$|*.xml$|*.txt$|*.txt$|*.csv$'
    
  • 删除untrack文件
    svn st | grep '^?' | awk '{print $2}' | xargs rm -rf
    

还原

  • 回滚到指到的$YOUR_VERSION版本
    svn merge -r $YOUR_VERSION
    
  • 指定$FROM_VERSION到$TO_VERSION范围回滚
    svn merge -r $FROM_VERSION:$TO_VERSION
    

报错处理

  • Checksum mismatch 本地与服务端校对信息不匹配,通过以下指令强刷新冲突
    svn update --set-depth empty
    svn update --set-depth infinity
    svn revert -R .
    
  • 删除所有miss状态的文件
    svn st | grep ^! | awk '{print " --force "$2}' | xargs svn rm
    

原文:
https://lizijie.github.io/2024/12/25/svn%E7%AC%94%E8%AE%B0.html
作者github:
https://github.com/lizijie

PREVIOUS杂谈
NEXTlocust游戏压测示例