Mac自带了SVN功能,不但可以作为SVN的服务器使用,还可以作为SVN的客户端使用
一.先来搭建SVN的服务器功能
注意低点,就是我们用命令行操作系统文件读写的时候,要随时注意我们是否有权限去读写操作文件,文件夹等情况。这也就是在MAC电脑上,我们去操作自己的用户目录的时候,读写权限都有,但是涉及到一些系统级别的目录的时候,我们去创建文件夹等就需要输入用户管理员的密码才可以进行某些操作。
话说回来,我们去创建SVN服务端
1. 在自己的用户目录下创建一个文件夹,前提是Svn文件夹已经创建,而且我们拥有这个文件的读写权限
svnadmin create /Users/shange/Svn/MyProjects
在这个SVN文件夹下,我们来创建一个子目录MyProjects
创建好之后,我们可以看见默认的一些文件已经存在了
2.配置SVN的用户权限
我们需要某些权限的话,就去修改这三个文件,来配置服务器
先来看看svnserve.conf文件吧,翻译文件名---》svn服务的配置文件,其实这个文件的内容很少,主要就是下面几句
就这些,文件中都有相应的解释,详情自己去看吧!
那我们要做的就是把
# anon-access = read 匿名访问的时候的权限
# auth-access = write 用户名登录后的访问权限
# password-db = passwd 密码配置数据打开
# authz-db = authz 权限配置打开
这几项前边的注释去掉 #和后边的一个空格,去掉
3.然后打开passwd配置文件,看了内容就明白了,就是去设置可以使用这个svn的用户名称和密码
4.打开authz配置文件,然后我们在这个文件中去设置分组或者个别用户的权限
很简单,xxx = yy,zz 就是将yy,zz两个用户表示为一个组xxx,然后@xxx = rw表示,这个xxx分组的权限是可读可写
[/]表示svn服务器中的所有资源库
5.启动SVN服务器
svnserve -d -r /Users/shange/Svn/MyProjects
输入这句命令,后边的文件路径就是自己之前设置的SVN的服务器文件夹路径.回车没有任何提示表示成功.
6.关闭SVN,
命令终端直接输入下面命令,第一个数字为进程号。
ps aux | grep svn
然后
sudo kill -9 进程号
服务器端就到这里。
二.SVN的客户端操作
1.从本地导入代码到服务器(第一次初始化导入)
svn import /Users/shange/Desktop/pro1 svn://localhost/ProjectsManager --username=tianshanshan --password=123456 -m "测试项目"
2.从服务器端下载代码到客户端
svn checkout svn://localhost/ProjectsManager/ios_demo --username=tianshanshan --password=123456 /Users/shange/Desktop/ios_demo2
3.提交更改过的代码到服务器
cmd下,先进入我们的客户端svn代码路径中
cd /Users/shangge/Desktop/ios_demo2
4.更新服务器端的代码到客户端
cmd下,先进入我们的客户端svn代码路径中
cd /Users/shangge/Desktop/ios_demo2
然后再输入指令:svn update
svn常见标识含义:
常用命令:
svn add xxx.a手动添加文件,先让svn能够控制xxx.a文件,这个过程叫受控,然后svn ci -m '' 提交受控文件到svn服务器
svn status 用来查看当前项目路径下受控的文件。
svn ci -m '' 完成受控文件的提交
svn list svn://localhost/ProjectsManager 查看当前svn服务器管理的项目列表
svn list svn://localhost/ProjectsManager/svnLearn 查看svn服务器下的svnLearn项目下的文件列表
svn list -v svn://localhost/ProjectsManager/svnLearn #查看详细的目录的信息(修订人,版本号,文件大小等)。
svn mkdir -m 'ios会员客户端' svn://192.168.139.2/projectE/ios-member 用来在svn://192.168.139.2/projectE目录下创建ios-member的svn目录
svn cat -r r11 pro1.rtf 查看 r11这个版本中的pro1.rtf的内容
svn diff #什么都不加,会坚持本地代码和缓存在本地.svn目录下的信息的不同;信息太多,没啥用处。
svn diff -r 3 #比较你的本地代码和版本号为3的所有文件的不同。
svn diff -r 3 text.c #比较你的本地代码和版本号为3的text.c文件的不同。
svn diff -r 5:6 #比较版本5和版本6之间所有文件的不同。
svn diff -r 5:6 text.c #比较版本5和版本6之间的text.c文件的变化。
svn diff -c 6 test.c #比较版本5和版本6之间的text.c文件的变化。
svn log #什么都不加会显示所有版本commit的日志信息:版本、作者、日期、comment。
svn log -r 4:20 #只看版本4到版本20的日志信息,顺序显示。
svn log -r 20:5 #显示版本20到4之间的日志信息,逆序显示。
svn log test.c #查看文件test.c的日志修改信息。
svn log -r 8 -v #显示版本8的详细修改日志,包括修改的所有文件列表信息。
svn log -r 8 -v -q #显示版本8的详细提交日志,不包括comment。
svn log -v -r 88:866 #显示从版本88到版本866之间,当前代码目录下所有变更的详细信息 。
svn log -v dir #查看目录的日志修改信息,需要加v。
svn log http://foo.com/svn/trunk/code/ #显示代码目录的日志信息。
svn diff -r 版本1:版本2 这个命令用来比对两个版本的差异,但是出现了中文乱码问题,中文系统上svn默认是中文编码ANSI,而代码是UTF-8编码。diff文件中由svn生成的部分用ANSI编码,代码部分被从UTF-8强转为ANSI,乱码由此产生。
两种解决方案:方法1:把比对的内容(我们的代码)改为GBK等中文编码;
方法2:把svn的编码改为UTF-8;
第一种不太合理,我们要的就是代码UTF-8编码,故用方法2。
修改命令行的代码页编码,使输出内容以UTF-8编码。
svn revert 某个文件名 只能把未提交的本地修改撤销,对于已经提交的代码就无能为力了, 取消所有的本地编辑
svn revert -R . 撤销当前文件下的修改,注意-R都变的.表示当前路径
svn revert --depth=infinity . 恢复整个文件的修改,注意最后的 .
回退版本方法一:
svn up; 该命令保证更新到最新的版本
svn log; 该命令查看历史修改,找到要恢复的版本
svn diff -r 版本1:版本2 [文件或目录]; 了解详情,两个版本的不同之处
svn merge -r 版本2:版本1 [文件或目录];注意版本之间的顺序,这个叫反向合并
svn diff -r r4329 SbaterBaseFrame/HomeViewController.m; 查看r4329这个版本与当前的文件中的SbaterBaseFrame目录下的HomeViewController.m的更改情况
svn ci -m ''; 提交会生成新的版本
回退版本方法二:
svn up -r r4329; 执行这条命令,当前工作版本就是r4329版本了,但是注意,这是时候svn并不会生成新的版本,下次svn up的时候还是会回到当前版本.
回滚详解步骤: