2020-02-06 12:45:18 starcslike 阅读数 21
  • 带你玩转SVN

    SVN是版本控制利器,团队协作工具之一。本课程主要面向开发人员,帮助初学者意识到版本控制的重要性,掌握SVN环境的搭建,以及SVN客户端工具的使用。

    19666 人正在学习 去看看 刘运强

Linux版本
在svn的hooks目录下新建一个名为pre-commit的文件并为其添加执行权限
pre-commit文件的内容如下:
#!/bin/sh

REPOS="$1"
TXN="$2"

# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
LENGTH=`$SVNLOOK log -t $TXN $REPOS | sed 's/ //g' | wc -m`
if [ "$LENGTH" -lt 2 ];then 
  echo -e "注释信息不能为空!" 1>&2 
  exit 1 
fi
exit 0


pre-commit 文件增加可执行权限
chmod +x pre-commit
脚本命令解释
LENGTH=`$SVNLOOK log -t “$TXN” “$REPOS” | sed 's/ //g' | wc -m`
将提交的日志信息作为便来那个输入之后,将过滤空格以后的字符个数作为判断变量

if [ "$LENGTH" -lt 2 ];then
传入变量来判断变量长度是否小于2,为空时长度为1,所以至少为2
-eq 等于号  -gt 大于号   -lt小于号

  echo -e "注释信息不能为空." 1>&2
  exit 1
echo 错误提示信息的时候必须重定向到 stderr ,即 1>&2

2018-08-03 18:05:50 hejinyin 阅读数 301
  • 带你玩转SVN

    SVN是版本控制利器,团队协作工具之一。本课程主要面向开发人员,帮助初学者意识到版本控制的重要性,掌握SVN环境的搭建,以及SVN客户端工具的使用。

    19666 人正在学习 去看看 刘运强

1.找到Window的SVN 仓库

进入cmd使用命令dump:

2.将dump好的App.dump拷贝到Linux,创建仓库

3.导入到仓库:

结束:

 

SVN操作相关命令:

svndumpfilter exclude wcare/trunk  <sw.dump> sw.filtered.dump

过滤掉sw.dump仓库里不需要的目录wcare/trunk

 

svnserve -d -r /home/svn

启动svn

2018-01-04 23:25:56 lileiyu1 阅读数 680
  • 带你玩转SVN

    SVN是版本控制利器,团队协作工具之一。本课程主要面向开发人员,帮助初学者意识到版本控制的重要性,掌握SVN环境的搭建,以及SVN客户端工具的使用。

    19666 人正在学习 去看看 刘运强

如何让Linux SVN 支持上传 .so .a 等文件

背景

前段时间,写了一个小程序,这个程序需要调用一个动态库,但是默认情况下SVN是不可以Add添加动态库文件的,后面发现SVN是默认过滤掉.so、.a、*.o等文件,而且linux下的SVN并不像windows一样有可以设置SVN选项的客户端,所以需要修该配置文件,如下。

解决方法

1.如果你是root用户,并且安装好了SVN,那么在/root下,有一个名为.subversion的隐藏文件夹,打开里面的config文件 如果是其它用户,则在/home/xxx/下的.subversion目录下的config。

2.查找global-ignores 字段,即可看到下面有个 global-ignores 键名,默认为注释掉了的,这表示SVN已经将它们作为默认值了。

3.取消注释,把 .so .so.[0-9]* *.a 也去掉,当然你也可以根据需要增加或减少你的过滤选项。

2018-06-01 10:59:10 luoaki 阅读数 310
  • 带你玩转SVN

    SVN是版本控制利器,团队协作工具之一。本课程主要面向开发人员,帮助初学者意识到版本控制的重要性,掌握SVN环境的搭建,以及SVN客户端工具的使用。

    19666 人正在学习 去看看 刘运强

Linux 下开发 svn 小工具

使用vscode + svn 开发时,遇到的问题
  • 执行svn status 出现一堆文件
  • 每添加一个文件都需要执行svn add 文件名
开发一个支持配置.svningore 的命令
思路:
  • 执行svn status > .svnstatus.svnstatus
  • 读取.svningore 文件
  • 过滤.svnstatus 文件
代码:
  • shell 脚本 msvn

    
    WORKSPACE_PATH=`pwd` # 获取运行命令的文件目录
    cd ${WORKSPACE_PATH} # 进入目录
    svn status > .svnstatus # 获取svn 文件状态
    node /home/tooles/svnignore.js $* # 执行node脚本过滤文件
  • node脚本 svnignore.js

    const fs = require('fs');
    // 默认忽略的目录
    let ignoreList = [
      '.svnstatus',
      '.svnignore',
      'msvn',
      'svnignore.js',
      '.vscode',
      '.metadata',
      '.recommenders',
      'logs',
      '.settings',
      'target',
    ]
    
    
    try {
      // 同步读取忽略文件
      let d = fs.readFileSync('./.svnignore');
      if (d) {
        // 如果配置了则覆盖默认忽略文件
        ignoreList = d.toString().split('\n');
      }
    } catch (error) {
      console.log(error)
    }
    
    // 读取 svn 文件状态
    fs.readFile('./.svnstatus', (err, data) => {
      if (err) throw err;
      console.log('修改的文件:');
    
      let dataArr = data.toString().split('\n');
      // 过滤忽略文件
      dataArr = dataArr.filter((v, i) => {
        for (let i in ignoreList) {
          if (v.indexOf(ignoreList[i]) > 0 || v.trim() === '') {
            return;
          }
        }
        // 打印到控制台
        console.log('\t', v);
        return true;
      })
      dataArr = dataArr.map((v, i) => {
        if (v.startsWith('?')) {
          return 'svn add ' + v.substring(1);
        } else {
          return 'svn commit ' + v.substring(1);
        }
      })
      // 排序 svn add 放到前面
      dataArr.sort();
      // 将 svn 命令存到 .svnstatus 文件,方便执行
      fs.writeFile('./.svnstatus', dataArr.join('\n'), function (err) {
        if (err) {
          return console.error(err);
        }
    
      });
    });
  • 配置环境变量 msvn 即可在任意地方执行 msvn 命令, 一款简单的svn 工具开发完成
使用:
  • 项目路径:
    txt
    ├── a.js
    └── .svnignore
  • 执行 msvn:

    • 文件目录:

      ├── a.js
      ├── .svnstatus
      └── .svnignore
    • 控制台输出:

      修改的文件:
          ? a.js
      
  • a.js加入 .svnignor 文件
  • 执行 msvn:

    • 文件目录:

      ├── a.js
      ├── .svnstatus
      └── .svnignore
    • 控制台输出:

      修改的文件:
      
      

      成功忽略了a.js

2019-05-01 00:29:32 uisoul 阅读数 1696
  • 带你玩转SVN

    SVN是版本控制利器,团队协作工具之一。本课程主要面向开发人员,帮助初学者意识到版本控制的重要性,掌握SVN环境的搭建,以及SVN客户端工具的使用。

    19666 人正在学习 去看看 刘运强
svn st|awk '{print $2}'|xargs svn add。

乍看之下觉得更加精炼,仔细看下就会发现这个脚本没有区分文件状态。所以完善了以下这个脚本:

svn st | awk '{if ( $1 == "?") { print $2}}' | xargs svn add

这样,以后我可能使用这个脚本成百上千次。(当然这个脚本也没有考虑过滤掉不要添加的文件)

当你第三次做一件事情的时候,就应该考虑将其工具化,自动化!

名称

svn add — 添加文件、目录或符号链。

概要

SVN子命令add PATH…描述

文件、目录或符号链到你的工作拷贝并且预定添加到版本库。它们会在下次提交上传并添加到版本库,如果你在提交之前改变了主意,你可以使用svn revert取消预定。

选项–targets FILENAME–non-recursive (-N)–quiet (-q)–config-dir DIR–no-ignore–auto-props–no-auto-props–force

例子:

我们通过一个例子来看一下SVN子命令add,添加一个文件到工作拷贝:

$ svn add foo.c 
A         foo.c

当添加一个目录,svn add缺省的行为方式是递归的:

$ svn add testdir
A         testdir
A         testdir/a
A         testdir/b
A         testdir/c
A         testdir/d

你可以只添加一个目录而不包括其内容:

$ svn add --non-recursive otherdir
A         otherdir

通常情况下,命令svn add *会忽略所有已经在版本控制之下的目录,有时候,你会希望添加所有工作拷贝的未版本化文件,包括那些隐藏在深处的文件,可以使用svn add的–force递归到版本化的目录下:

$ svn add * --force
A         foo.c
A         somedir/bar.c
A         otherdir/docs/baz.doc

SVN子命令add的用法介绍讲解完毕。

svn add *
svn add */**/*

等同于

svn add * --force

svn目录的拷贝方法

阅读数 459

没有更多推荐了,返回首页