Table of Contents
前言
今天在公司使用svn的时候,操作出现了异常,倒不是bug,但是记得上次遇到过,这次又忘记了,所以要好好的总结一下.a
Svn 安装
在ubuntu上:
Sudo Apt-Get Install Subversion
还有一个subversion的工具需要安装一下:
Sudo Apt-Get Install Subversion-Tools
Mac OX
brew install subversion
Svn初使用
从远程仓库中copy一份文件(检出)
使用svn做版本控制的第一步一般都是从远程仓库中复制一个副本,使用的命令是:
Svn Checkout Https//.... --Username Yourusername
这个命令和git中的命令很不一样,个人感觉还是git中的命令比较直白,该命令等同 于git:中的命令:
Git Clone Url-To-Reposity
将文件加入版本库
Svn Add Filename
Commit
Svn Commit -M " Some Message"
Update
Svn Update
Svn Update -R
Svn Update File-Name
Delete
svn中要删除文件的时候,如果直接删除代码库中的文件,然后commit,svn是不会将库中的代码,直接删除的,要使用下面的代码删除命令
svn delete file-name/directory-name
注意在svn中,删除文件和文件夹使用同一个命令
可能出现的异常
当用户A删除了某个文件夹direct1中的代码,然后A提交之后,用户B更新代码仓库之后,不能正常的删除某个文件夹direct1
问题的原因: 这可能是因为用户B修改了direct1中的内容,此时svn不会将你修改的文件删除,所以此时会遇到更新之后,文件夹不能更新的情况
问题的解决: 知道了问题的原因,剩下的就非常和解决了.只需要删除自己修改过的文件.当然这么做的前提是你确实不需要这个修改过的代码了.
删除svn代码仓库中.svn文件
在svn代码仓库中 每个 文件夹的目录下都会存在名称为 .svn 的隐藏文件.该文件是记录文件变动的svn记录文件,svn能够对代码做版本控制靠得就是这个隐藏的文件.在很多情况下我们可能需要删除每个目录下面的.svn文件,手动删除实在太麻烦了.所以写了下面的脚本,来使用下面的脚本删除指定目录以及子目录.svn文件.
#!/bin/bash
#Walk all the files in the $1 dir
function walk_dir()
{
local dir2walk=$1
local files2walk=(`ls -a ${dir2walk}`)
local file
for file in ${files2walk[@]}; do
local next2walk=${dir2walk}/${file}
if [[ -d ${next2walk} ]]; then
if [[ ${file} != "." && ${file} != ".." && ${file} != ".svn" ]]; then
walk_dir ${next2walk}
elif [[ ${file} == ".svn" ]]; then
rm -rf "${next2walk}"
echo "rm ${next2walk}"
fi
else
echo ${next2walk}
fi
done
}
function main()
{
local dir2walk=$1
walk_dir ${dir2walk}
}
#set -x
main $@
#set +x