操作SVN的SHELL

 
#!/bin/bash
# 提交增加的文件
# 用法: add ProjectWorkDir
ProjName=$1
if [ "$ProjName" == "" ]; then
exit 1
fi

WORK_DIR=/home/xwz/test/$ProjName/dst
cd $WORK_DIR

# 需要添加的文件
TO_ADD_FILE=(`svn status $WORK_DIR | grep ^? | awk '{printf "%s ", $2}'`)
#echo ${TO_ADD_FILE[*]}
if [ "$TO_ADD_FILE" != "" ];then
svn add ${TO_ADD_FILE[*]}
fi

svn commit -m "Add File in $ProjName"

#!/bin/bash
# 提交删除的文件
# 用法: del ProjectWorkDir
ProjName=$1
if [ "$ProjName" == "" ]; then
exit 1
fi

WORK_DIR=/home/xwz/test/$ProjName/dst
cd $WORK_DIR

# 需要删除的文件
TO_DEL_FILE=(`svn status $WORK_DIR | grep ^D | awk '{printf "%s ", $2}'`)
if [ "$TO_DEL_FILE" != "" ]; then
svn del ${TO_DEL_FILE[*]}
fi

svn commit -m "Del File in $ProjName"

#!/bin/bash
# 初始化SVN的工作目录
# 用法: init DOWNLOAD_DIR Project_Name
DOWNLOAD=$1
ProjName=$2
if [ "$DOWNLOAD" == "" ] || [ "$ProjName" == "" ]; then
exit 1
fi

#svn mkdir file:///var/svn/repos/test/$ProjName /
#-m "Make a new DIR for $PrejName"
#svn mkdir file:///var/svn/repos/test/$ProjName/src /
#-m "make a src DIR for $PrejName"

# 导入数据到SVN数据仓库
svn import $DOWNLOAD file:///var/svn/repos/test/$ProjName/src /
-m "Import $ProjName data"

# 复制源数据到数据
svn copy file:///var/svn/repos/test/$ProjName/src /
file:///var/svn/repos/test/$ProjName/dst -m "A Remote Copy"

# 新建目录tags,log
svn mkdir file:///var/svn/repos/test/$ProjName/tags -m "mkdir $ProjName/tags"
svn mkdir file:///var/svn/repos/test/$ProjName/log -m "mkdir $ProjName/log"

# 标记源数据
svn copy file:///var/svn/repos/test/$ProjName/src /
file:///var/svn/repos/test/$ProjName/tags/src-1.0 /
-m "$ProjName Tag src-1.0"

# 检出项目资料
svn checkout file:///var/svn/repos/test/$ProjName /
/home/xwz/test/$ProjName

#!/bin/bash
# 提交修改的文件
# 用法: modify ProjectWorkDir
ProjName=$1
if [ "$ProjName" == "" ]; then
exit 1
fi

WORK_DIR=/home/xwz/test/$ProjName/dst

#svn status $WORK_DIR > /home/xwz/doc/temp123
#提交项目修改
svn commit $WORK_DIR -m "$ProjName 提交修改"

#!/bin/bash
# 检查项目资料是否更新
# 用法:update DOWNLOAD_DIR PROJECT_NAME
DOWNLOAD=$1
PROJ_NAME=$2
if [ $DOWNLOAD == "" ] || [ "$PROJ_NAME" == "" ]; then
exit 1
fi

WORK_DIR=/home/xwz/test/$PROJ_NAME/src

# 删除工作副本
# rm -rf $WORK_DIR/* # 删除工作目录下的所有文件,包括.svn目录
find $WORK_DIR "*" | grep -v .svn | xargs rm -f
# 拷贝下载资料到工作目录
cp -R $DOWNLOAD/* $WORK_DIR

date >> $WORK_DIR/../log/change.log
svn status $WORK_DIR >> $WORK_DIR/../log/change.log

# 需要提交修改的文件
TO_MOD_FILE=(`svn status $WORK_DIR | grep ^M | awk '{printf "%s ", $2}'`)
if [ "$TO_MOD_FILE" != "" ];then
svn commit $WORK_DIR -m "提交修改"
fi

# 增加文件数
ADDNUM=(`svn status $WORK_DIR|grep -c ^?`)
# 需要提交添加的文件
TO_ADD_FILE=(`svn status $WORK_DIR | grep ^? | awk '{printf "%s ", $2}'`)
if [ "$TO_ADD_FILE" != "" ];then
svn add ${TO_ADD_FILE[*]}
fi
svn commit $WORK_DIR -m "提交添加,$PROJ_NAME"

# 需要提交删除的文件
TO_DEL_FILE=(`svn status $WORK_DIR | grep ^! | awk '{printf "%s ", $2}'`)
if [ "$TO_ADD_FILE" != "" ];then
svn del ${TO_DEL_FILE[*]}
fi
svn commit $WORK_DIR -m "提交删除,$PROJ_NAME"

# 给当前版本加一标签
if [ $ADDNUM > 20 ]; then
# 升级主版本号
NUM=(`ls -l $WORK_DIR/../tags | awk '/^d/ {print $8}'|awk '/^src-/'|/
sed -n '$p'|cut -d- -f2 |cut -d. -f1`)
let NUM+=1
NUM+=.0
NUM=src-$NUM

else
# 升级次版本号
NUM1st=(`ls -l $WORK_DIR/../tags | awk '/^d/ {print $8}'|awk '/^src-/'| /
sed -n '$p'|cut -d. -f1`)
NUM2nd=(`ls -l $WORK_DIR/../tags | awk '/^d/ {print $8}'|awk '/^src-/'| /
sed -n '$p'|cut -d. -f2`)
let NUM2nd+=1
NUM=$NUM1st.$NUM2nd
fi

svn copy file:///var/svn/repos/test/$PROJ_NAME/src /
file:///var/svn/repos/test/$PROJ_NAME/tags/$NUM -m "标签 $NUM"

# ls -l $WORK_DIR/../tags | awk '/^d/ {print $8}'|awk '/^src-/'| sed -n '$p'



第一列 指出一个项目的是添加、删除还是其它的修改

‘ ’ 没有修改

A’ 预定要添加的项目

D’ 预定要删除的项目

M’ 项目已经修改了

R’ 项目在工作拷贝中已经被替换了

C’ 项目的内容与更新得到的数据冲突了

X’ 项目与外部定义相关

I’ 项目被忽略

‘?’ 项目不在版本控制之下

‘!’ 项目已经丢失

‘~’ 项目作为一种对象纳入版本控制,但是已经被另一种对象替代

第二列 一个文件或目录的属性的状态

‘ ’没有修改

M’ 这个项目的属性已经修改

C’ 这个项目的属性与从版本库得到的更新有冲突

第三列 只在工作拷贝锁定时才会出现

‘ ’ 项目没有锁定

L’ 项目已经锁定

第四列 只在预定包含历史的项目出现

' ' 没有历史预定要提交

'+' 历史预定要伴随提交

第五列 只在项目跳转到相对于它的父目录时出现

' ' 项目是它的父目录的孩子

'S' 项目已经转换

第六列 显示锁定信息

' ' 'K' 文件锁定在工作拷贝

'O' 文件被另一个工件拷贝的另一个用户锁定

'T' 文件锁定在工作拷贝, 但是锁定被" 窃取" 而不可用

'B' 文件锁定在工件拷贝, 但是锁定被" 破坏" 而不可用

第七列 过期信息

' ' 这人项目在工件拷贝是最新的

'*' 在服务器这个项目有了新的修订版本

cp -R /media/DATA/cust ./ 拷贝目录(包含文件)到目录

mv ./src ./cust/ 移动目录src 及其内容到./cust/

svn mkdir srcdir file:///var/svn/repos/test

svn import srcdir file:///var/svn/repos/test/srcdir

cd /workdir svn update file:///var/svn/repos/test/srcdir

svn copy srcdir dstdir svn commit 修改文件

svn update // 返回版本号,不会变更修改过的文件

svn commit

删除文件

增加文件

修改文件

svn status // 返回当前目录下的文件变更情况, 对于其它目录的不会反映出来

svn diff // 返回被修改文件的比较报告

svn commit // 提交文件,仅提交修改过的文件,删除和增加的文件未有提交

svn del filename svn status // 返回文件变更情况

svn commit // 提交

svn status ? hello svn add hello A svn ci -m "add a file" 增加 dst/hello awk '$1=="!" {printf("%s/n",$2)}' ./log

svn status | awk '$1=="D" {printf"%s",$2}'

svn status |grep ^D | awk '{printf $2}'

SVNADMIN="$(which svnadmin)"

SVNLOOK="$(which svnlook)"


                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值